Compare commits
34 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e54a105222 | ||
|
|
bee911df5e | ||
|
|
e2e533d481 | ||
|
|
2518ded84f | ||
|
|
fab88401ea | ||
|
|
7fed2f0a98 | ||
|
|
7c3ef81dec | ||
|
|
cbb52bf3aa | ||
|
|
86f73a96d0 | ||
|
|
dbba39373b | ||
|
|
30455759e8 | ||
|
|
eb675f24ea | ||
|
|
1357ec9b6d | ||
|
|
396986fefd | ||
|
|
c591cee153 | ||
|
|
54ae4fdb63 | ||
|
|
e846a0a30c | ||
|
|
54aafefcf4 | ||
|
|
c138b52c30 | ||
|
|
8b77966287 | ||
|
|
30e8da25a2 | ||
|
|
0d71accfd5 | ||
|
|
02db7b6fe2 | ||
|
|
3e75b54958 | ||
|
|
80b9703318 | ||
|
|
6a8d25f140 | ||
|
|
e9b7b5b42f | ||
|
|
1bc01d0741 | ||
|
|
a9748bdf03 | ||
|
|
1649c2b032 | ||
|
|
897ccefd71 | ||
|
|
95fa36d7a8 | ||
|
|
9d8c1431be | ||
|
|
2c883d2be3 |
31
CHANGELOG.md
@@ -6,6 +6,29 @@ Date format : day/month/year
|
||||
> - `foundry-version`: Stick to the major version of FoundryVTT.
|
||||
> - `system-version`: System functionalities and 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 fade configuration (#66)
|
||||
- Added some Tooltips loading optimizations (#62 Thanks to KitCat).
|
||||
- Added some Properties loading optimizations (#63 Thanks to KitCat).
|
||||
- Conditions changes :
|
||||
- Added basic token conditions (Thanks to Putty)
|
||||
- Added compromised condition when strife goes beyond max (Thanks to Putty).
|
||||
- Added apply incapacitated if character's fatigue goes beyond endurance (Thanks to Putty).
|
||||
- Added ability to remove condition from actor sheet and show core journal on click.
|
||||
- Added option to show all conditions (StatusEffect), default to false (show only l5R conditions).
|
||||
|
||||
## 1.13.0 - 24/08/2025 - Foundry v13 Compatibility (Thx to Litasa)
|
||||
__! Be certain to carefully back up any critical user data before installing this update !__
|
||||
- Updated the System to FoundryVTT v13.
|
||||
- Compendiums
|
||||
- Added English compendium for `Children of the Five Winds`.
|
||||
- Added French translation for `Writ of the Wild`.
|
||||
- Fix Compendium Typo: "Beseech Hida's MIght" -> "Beseech Hida's Might" (#59).
|
||||
- Actor sheets: Technique types are now hidden when they are not checked in locked mode.
|
||||
- Fix 20Q: Technique message fixed (unallowed tech for School).
|
||||
- Switched wysiwyg editor engine to `prosemirror` for text editor (`tinymce` will be removed in Foundry v14).
|
||||
|
||||
## 1.12.3 - 13/03/2025 - Fixes and Compendiums Filters (Thx to Litasa)
|
||||
- Added Compendiums Filters (#41)
|
||||
- Separated the reference and the page number from book reference for filtering purpose.
|
||||
@@ -43,12 +66,12 @@ __! Be certain to carefully back up any critical user data before installing thi
|
||||
## 1.11.0 - 13/12/2023 - Little fixes
|
||||
- 20Q :
|
||||
- Starting techniques now have a limit of 6 techniques instead of 5 (see Celestial Realms : `Moshi Sun Sentinel School`).
|
||||
- Enable dropping on the 'drop here' label for 20Q (thk to Litasa !34).
|
||||
- Enable dropping on the 'drop here' label for 20Q (thk to Litasa #34).
|
||||
- Compendiums : Added masteries and abilities from Deathly Turns.
|
||||
|
||||
## 1.10.1 - 22/08/2023 - Litasa's fixes
|
||||
All these changes are thanks to Litasa.
|
||||
- Roll-n-Keep dialog now waits for the DiceSoNice animation to finish before displaying the result when re-rolling or exploding dice (!28).
|
||||
- Roll-n-Keep dialog now waits for the DiceSoNice animation to finish before displaying the result when re-rolling or exploding dice (#28).
|
||||
- Adding the ability to have a different name for the custom-compendium (needed to disable the system embedded ones).
|
||||
- Fixes some CSS issues when the font size is not the default (#50, #51 and #52).
|
||||
|
||||
@@ -64,8 +87,8 @@ __! Be certain to carefully back up any critical user data before installing thi
|
||||
|
||||
## 1.9.6 - 14/05/2023 - Bragma's QoL
|
||||
All these changes are thanks to Bragma.
|
||||
- Added effects panel to both pc and npc (!26).
|
||||
- Added a underline on rings to show current stance (!25).
|
||||
- Added effects panel to both pc and npc (#26).
|
||||
- Added an underline on rings to show current stance (#25).
|
||||
- Fix Lists not showing correctly in journal (#44).
|
||||
|
||||
## 1.9.5 - 11/01/2023 - Adding Modifiers
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||

|
||||
|
||||
[](https://ko-fi.com/vlyan)
|
||||
[](https://foundryvtt.com/)
|
||||
[](https://foundryvtt.com/)
|
||||
[](https://forge-vtt.com/bazaar#package=l5r5e)
|
||||
[](https://www.foundryvtt-hub.com/package/l5r5e/)
|
||||
[](https://www.foundryvtt-hub.com/package/l5r5e/)
|
||||
|
||||
BIN
system/assets/icons/conditions/air-black.webp
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
system/assets/icons/conditions/air-red.webp
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
system/assets/icons/conditions/air-white.webp
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
system/assets/icons/conditions/earth-black.webp
Normal file
|
After Width: | Height: | Size: 9.8 KiB |
BIN
system/assets/icons/conditions/earth-red.webp
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
system/assets/icons/conditions/earth-white.webp
Normal file
|
After Width: | Height: | Size: 9.5 KiB |
BIN
system/assets/icons/conditions/fire-black.webp
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
system/assets/icons/conditions/fire-red.webp
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
system/assets/icons/conditions/fire-white.webp
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
system/assets/icons/conditions/void-black.webp
Normal file
|
After Width: | Height: | Size: 7.8 KiB |
BIN
system/assets/icons/conditions/void-red.webp
Normal file
|
After Width: | Height: | Size: 9.3 KiB |
BIN
system/assets/icons/conditions/void-white.webp
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
system/assets/icons/conditions/water-black.webp
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
system/assets/icons/conditions/water-red.webp
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
system/assets/icons/conditions/water-white.webp
Normal file
|
After Width: | Height: | Size: 13 KiB |
@@ -156,6 +156,30 @@
|
||||
"source_reference": {
|
||||
"page": "97"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Mirror Armor",
|
||||
"name": "Mirror Armor (WIP)",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Unicorn Barding",
|
||||
"name": "Unicorn Barding (WIP)",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Yuki: The Ancestral Armor of the Unicorn Clan [Blessed Treasure]",
|
||||
"name": "Yuki: The Ancestral Armor of the Unicorn Clan [Blessed Treasure] (WIP)",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -148,6 +148,30 @@
|
||||
"source_reference": {
|
||||
"page": "105"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Ujik Horsebow Pattern",
|
||||
"name": "Ujik Horsebow Pattern (WIP)",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Utsuko Pattern",
|
||||
"name": "Utsuko Pattern (WIP)",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Watered Steel Pattern",
|
||||
"name": "Watered Steel Pattern (WIP)",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -892,6 +892,86 @@
|
||||
"source_reference": {
|
||||
"page": "96"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Astrolabe",
|
||||
"name": "Astrolabe (WIP)",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Horo (Arrow Cloak)",
|
||||
"name": "Horo (Arrow Cloak) (WIP)",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Lantern (Personal)",
|
||||
"name": "Lantern (Personal) (WIP)",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Mineral-Oil Lamp",
|
||||
"name": "Mineral-Oil Lamp (WIP)",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Prayer Rug",
|
||||
"name": "Prayer Rug (WIP)",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Sand Clock",
|
||||
"name": "Sand Clock (WIP)",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Traveling Board Games",
|
||||
"name": "Traveling Board Games (WIP)",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Word of the Prophet",
|
||||
"name": "Word of the Prophet (WIP)",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Talisman of the Sun [Blessed Treasure]",
|
||||
"name": "Talisman of the Sun [Blessed Treasure] (WIP)",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Fox Pipe [Blessed Treasure]",
|
||||
"name": "Fox Pipe [Blessed Treasure] (WIP)",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -213,67 +213,106 @@
|
||||
}
|
||||
},
|
||||
"Illness: Oozing Sore Disease": {
|
||||
"name": "Illness: Oozing Sore Disease (WIP)",
|
||||
"name": "Maladie : Bubons purulents",
|
||||
"pages": {
|
||||
"Figure: Illness: Oozing Sore Disease": {
|
||||
"name": "Illness: Oozing Sore Disease (WIP) - Image",
|
||||
"src": "systems/l5r5e/assets/icons/social.svg"
|
||||
"name": "Maladie : Bubons purulents - Image",
|
||||
"src": "icons/svg/eye.svg"
|
||||
},
|
||||
"Illness: Oozing Sore Disease": {
|
||||
"name": "Illness: Oozing Sore Disease (WIP)",
|
||||
"text": "<blockquote>Les Édits de la Nature</blockquote>"
|
||||
"name": "Maladie : Bubons purulents",
|
||||
"text": "<blockquote>Les Édits de la Nature p.140</blockquote>"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Illness: Gut Sickness": {
|
||||
"name": "Illness: Gut Sickness (WIP)",
|
||||
"name": "Maladie : Mal des entrailles",
|
||||
"pages": {
|
||||
"Figure: Illness: Gut Sickness": {
|
||||
"name": "Illness: Gut Sickness (WIP) - Image",
|
||||
"src": "systems/l5r5e/assets/icons/social.svg"
|
||||
"name": "Maladie : Mal des entrailles - Image",
|
||||
"src": "icons/svg/poison.svg"
|
||||
},
|
||||
"Illness: Gut Sickness": {
|
||||
"name": "Illness: Gut Sickness (WIP)",
|
||||
"text": "<blockquote>Les Édits de la Nature</blockquote>"
|
||||
"name": "Maladie : Mal des entrailles",
|
||||
"text": "<blockquote>Les Édits de la Nature p.141</blockquote>"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Illness: Coughing Illness": {
|
||||
"name": "Illness: Coughing Illness (WIP)",
|
||||
"name": "Maladie : Mauvaise toux",
|
||||
"pages": {
|
||||
"Figure: Illness: Coughing Illness": {
|
||||
"name": "Illness: Coughing Illness (WIP) - Image",
|
||||
"src": "systems/l5r5e/assets/icons/social.svg"
|
||||
"name": "Maladie : Mauvaise toux - Image",
|
||||
"src": "icons/svg/poison.svg"
|
||||
},
|
||||
"Illness: Coughing Illness": {
|
||||
"name": "Illness: Coughing Illness (WIP)",
|
||||
"text": "<blockquote>Les Édits de la Nature</blockquote>"
|
||||
"name": "Maladie : Mauvaise toux",
|
||||
"text": "<blockquote>Les Édits de la Nature p.141</blockquote>"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Illness: Unsteady Illness": {
|
||||
"name": "Illness: Unsteady Illness (WIP)",
|
||||
"name": "Maladie : Vertiges",
|
||||
"pages": {
|
||||
"Figure: Illness: Unsteady Illness": {
|
||||
"name": "Illness: Unsteady Illness (WIP) - Image",
|
||||
"src": "systems/l5r5e/assets/icons/social.svg"
|
||||
"name": "Maladie : Vertiges - Image",
|
||||
"src": "icons/svg/daze.svg"
|
||||
},
|
||||
"Illness: Unsteady Illness": {
|
||||
"name": "Illness: Unsteady Illness (WIP)",
|
||||
"text": "<blockquote>Les Édits de la Nature</blockquote>"
|
||||
"name": "Maladie : Vertiges",
|
||||
"text": "<blockquote>Les Édits de la Nature p.141</blockquote>"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Illness: Fire Rash": {
|
||||
"name": "Illness: Fire Rash (WIP)",
|
||||
"name": "Maladie : Rougeurs",
|
||||
"pages": {
|
||||
"Figure: Illness: Fire Rash": {
|
||||
"name": "Illness: Fire Rash (WIP) - Image",
|
||||
"src": "systems/l5r5e/assets/icons/social.svg"
|
||||
"name": "Maladie : Rougeurs - Image",
|
||||
"src": "icons/svg/fire.svg"
|
||||
},
|
||||
"Illness: Fire Rash": {
|
||||
"name": "Illness: Fire Rash (WIP)",
|
||||
"text": "<blockquote>Les Édits de la Nature</blockquote>"
|
||||
"name": "Maladie : Rougeurs",
|
||||
"text": "<blockquote>Les Édits de la Nature p.141</blockquote>"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Centered": {
|
||||
"name": "Centered (WIP)",
|
||||
"pages": {
|
||||
"Figure: Centered": {
|
||||
"name": "Centered (WIP) - Image",
|
||||
"src": "systems/l5r5e/assets/icons/social.svg"
|
||||
},
|
||||
"Centered": {
|
||||
"name": "Centered (WIP)",
|
||||
"text": "<blockquote>Les Enfants des Cinq Vents</blockquote>"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Emboldened": {
|
||||
"name": "Emboldened (WIP)",
|
||||
"pages": {
|
||||
"Figure: Emboldened": {
|
||||
"name": "Emboldened (WIP) - Image",
|
||||
"src": "systems/l5r5e/assets/icons/social.svg"
|
||||
},
|
||||
"Emboldened": {
|
||||
"name": "Emboldened (WIP)",
|
||||
"text": "<blockquote>Les Enfants des Cinq Vents</blockquote>"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Possessed": {
|
||||
"name": "Possessed (WIP)",
|
||||
"pages": {
|
||||
"Figure: Possessed": {
|
||||
"name": "Possessed (WIP) - Image",
|
||||
"src": "icons/svg/terror.svg"
|
||||
},
|
||||
"Possessed": {
|
||||
"name": "Possessed (WIP)",
|
||||
"text": "<blockquote>Les Enfants des Cinq Vents</blockquote>"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -135,15 +135,15 @@
|
||||
}
|
||||
},
|
||||
"Imbalanced (One or More Elements) Variant": {
|
||||
"name": "Imbalanced (One or More Elements) Variant (WIP)",
|
||||
"name": "Déséquilibré (un ou plusieurs éléments) – variante",
|
||||
"pages": {
|
||||
"Figure: Imbalanced (One or More Elements) Variant": {
|
||||
"name": "Imbalanced (One or More Elements) Variant (WIP) - Image",
|
||||
"name": "Déséquilibré (un ou plusieurs éléments) – variante - Image",
|
||||
"src": "icons/svg/stoned.svg"
|
||||
},
|
||||
"Imbalanced (One or More Elements) Variant": {
|
||||
"name": "Imbalanced (One or More Elements) Variant (WIP)",
|
||||
"text": "<blockquote>Les Édits de la Nature</blockquote>"
|
||||
"name": "Déséquilibré (un ou plusieurs éléments) – variante",
|
||||
"text": "<blockquote>Les Édits de la Nature p.139</blockquote>"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -746,26 +746,53 @@
|
||||
},
|
||||
{
|
||||
"id": "Insomniac",
|
||||
"name": "Insomniac (WIP)",
|
||||
"name": "Insomniaque",
|
||||
"types": "Mental",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
"page": "104"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Out of Shape",
|
||||
"name": "Out of Shape (WIP)",
|
||||
"name": "Petite forme",
|
||||
"types": "Physique",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": "105"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Stalked by [Creature]",
|
||||
"name": "Poursuivi par [une créature]",
|
||||
"types": "Relations, Mental, Spirituel",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": "105"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Lost Family History",
|
||||
"name": "Lost Family History (WIP)",
|
||||
"types": "Relations, Matériel",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Stalked by [Creature]",
|
||||
"name": "Stalked by [Creature] (WIP)",
|
||||
"types": "Relations, Mental, Spirituel",
|
||||
"id": "Penalty",
|
||||
"name": "Penalty (WIP)",
|
||||
"types": "Infamie, Social",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Schism in Status",
|
||||
"name": "Schism in Status (WIP)",
|
||||
"types": "Infamie, Relations",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
|
||||
@@ -359,7 +359,43 @@
|
||||
},
|
||||
{
|
||||
"id": "Fear of [Common Creature]",
|
||||
"name": "Fear of [Common Creature] (WIP)",
|
||||
"name": "Phobie des [Créature Ordinaire]",
|
||||
"types": "Mental",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": "106"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Fear of Mediocrity",
|
||||
"name": "Crainte de la médiocrité",
|
||||
"types": "Relations, Mental",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": "105"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Fear of Poison",
|
||||
"name": "Peur du poison",
|
||||
"types": "Mental",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": "106"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Animal Signs",
|
||||
"name": "Animal Signs (WIP)",
|
||||
"types": "Mental, Spirituel",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Disdain for Urban Sprawl",
|
||||
"name": "Disdain for Urban Sprawl (WIP)",
|
||||
"types": "Mental",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
@@ -367,17 +403,8 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Fear of Mediocrity",
|
||||
"name": "Fear of Mediocrity (WIP)",
|
||||
"types": "Relations, Mental",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Fear of Poison",
|
||||
"name": "Fear of Poison (WIP)",
|
||||
"id": "Tip of the Tongue",
|
||||
"name": "Tip of the Tongue (WIP)",
|
||||
"types": "Mental",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
|
||||
@@ -620,26 +620,53 @@
|
||||
},
|
||||
{
|
||||
"id": "Knowledgeable Wilderness Guide",
|
||||
"name": "Knowledgeable Wilderness Guide (WIP)",
|
||||
"name": "Guide de plein air expert",
|
||||
"types": "Relations, Spirituel",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
"page": "102"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Skilled Midwife",
|
||||
"name": "Skilled Midwife (WIP)",
|
||||
"name": "Sage-femme compétente",
|
||||
"types": "Relations",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": "102"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Thoughtful Arbiter",
|
||||
"name": "Arbitre réfléchi",
|
||||
"types": "Relations",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": "102"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Affinity with [Animal Type]",
|
||||
"name": "Affinity with [Animal Type] (WIP)",
|
||||
"types": "Renommée, Relations",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Thoughtful Arbiter",
|
||||
"name": "Thoughtful Arbiter (WIP)",
|
||||
"types": "Relations",
|
||||
"id": "Legal Scholarship",
|
||||
"name": "Legal Scholarship (WIP)",
|
||||
"types": "Relations, Social",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Syncretic Philosophy",
|
||||
"name": "Syncretic Philosophy (WIP)",
|
||||
"types": "Relations, Mental",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
|
||||
@@ -377,17 +377,44 @@
|
||||
},
|
||||
{
|
||||
"id": "Charity",
|
||||
"name": "Charity (WIP)",
|
||||
"name": "Charité",
|
||||
"types": "Relations, Mental",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": "103"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Kintsugi",
|
||||
"name": "Kintsugi",
|
||||
"types": "Mental, Physique",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": "104"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Horse Racing",
|
||||
"name": "Horse Racing (WIP)",
|
||||
"types": "Physique",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Kintsugi",
|
||||
"name": "Kintsugi (WIP)",
|
||||
"types": "Mental, Physique",
|
||||
"id": "Hot Pot",
|
||||
"name": "Hot Pot (WIP)",
|
||||
"types": "Relations, Physique",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Stargazing",
|
||||
"name": "Stargazing (WIP)",
|
||||
"types": "Mental, Spirituel",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
|
||||
@@ -276,6 +276,38 @@
|
||||
"source_reference": {
|
||||
"page": "105"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Ujik Horsebow Pattern",
|
||||
"name": "Ujik Horsebow Pattern (WIP)",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Utsuko Pattern",
|
||||
"name": "Utsuko Pattern (WIP)",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Watered Steel Pattern",
|
||||
"name": "Watered Steel Pattern (WIP)",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Hewing",
|
||||
"name": "Hewing (WIP)",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -604,6 +604,14 @@
|
||||
"source_reference": {
|
||||
"page": "114"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "The World is Not Heavy",
|
||||
"name": "The World is Not Heavy (WIP)",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -535,111 +535,183 @@
|
||||
},
|
||||
{
|
||||
"id": "Bear’s Swipe Style",
|
||||
"name": "Bear’s Swipe Style (WIP)",
|
||||
"name": "Style de la gifle de l’ours",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
"page": "114"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Serpent’s Twist Style",
|
||||
"name": "Serpent’s Twist Style (WIP)",
|
||||
"name": "Style de la contorsion du serpent",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
"page": "114"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Swallow’s Dart Style",
|
||||
"name": "Swallow’s Dart Style (WIP)",
|
||||
"name": "Style de la vivacité de l’hirondelle",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
"page": "115"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Tiger’s Lunge Style",
|
||||
"name": "Tiger’s Lunge Style (WIP)",
|
||||
"name": "Style de l’attaque du tigre",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
"page": "115"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Flexible Grip",
|
||||
"name": "Flexible Grip (WIP)",
|
||||
"name": "Prise flexible",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
"page": "116"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Howling Gale Defense",
|
||||
"name": "Howling Gale Defense (WIP)",
|
||||
"name": "Défense de la bourrasque hurlante",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
"page": "115"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Heron’s Grasp Style",
|
||||
"name": "Heron’s Grasp Style (WIP)",
|
||||
"name": "Style de l’étreinte du héron",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
"page": "116"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Serow’s Leap Style",
|
||||
"name": "Serow’s Leap Style (WIP)",
|
||||
"name": "Style du saro bondissant",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
"page": "116"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Tumbling Oak Style",
|
||||
"name": "Tumbling Oak Style (WIP)",
|
||||
"name": "Style de la chute du chêne",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
"page": "116"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Flight",
|
||||
"name": "Flight (WIP)",
|
||||
"name": "Vol",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
"page": "118"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Razor Bite",
|
||||
"name": "Razor Bite (WIP)",
|
||||
"name": "Morsure acérée",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
"page": "117"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Owl’s Swoop Style",
|
||||
"name": "Owl’s Swoop Style (WIP)",
|
||||
"name": "Style du piqué de la chouette",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
"page": "118"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Skittering Shift",
|
||||
"name": "Skittering Shift (WIP)",
|
||||
"name": "Déguerpissement prompt",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": "117"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Tail Sweep",
|
||||
"name": "Balayage caudal",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": "117"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Cautious Tread",
|
||||
"name": "Cautious Tread (WIP)",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Tail Sweep",
|
||||
"name": "Tail Sweep (WIP)",
|
||||
"id": "Stalking Leopard Style",
|
||||
"name": "Stalking Leopard Style (WIP)",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Sudden Downpour Style",
|
||||
"name": "Sudden Downpour Style (WIP)",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Swaying Grass Evasion",
|
||||
"name": "Swaying Grass Evasion (WIP)",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Distracting Flurry Style",
|
||||
"name": "Distracting Flurry Style (WIP)",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Scouring Wind Style",
|
||||
"name": "Scouring Wind Style (WIP)",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Slashing Sandstorm Style",
|
||||
"name": "Slashing Sandstorm Style (WIP)",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Descending Swarm Shot",
|
||||
"name": "Descending Swarm Shot (WIP)",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Thunderbolt Style",
|
||||
"name": "Thunderbolt Style (WIP)",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
|
||||
@@ -191,122 +191,122 @@
|
||||
},
|
||||
{
|
||||
"id": "Mercy of the Stone Fortune",
|
||||
"name": "Mercy of the Stone Fortune (WIP)",
|
||||
"name": "Pitié de la fortune de la pierre",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
"page": "109"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Rejuvenating Breath",
|
||||
"name": "Rejuvenating Breath (WIP)",
|
||||
"name": "Souffle revigorant",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
"page": "109"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Shadow of Ancient Peaks",
|
||||
"name": "Shadow of Ancient Peaks (WIP)",
|
||||
"name": "A l’ombre des pics antiques",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
"page": "109"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Cutting Wind Talons",
|
||||
"name": "Cutting Wind Talons (WIP)",
|
||||
"name": "Serres du vent tranchant",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
"page": "110"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Grace of the Gentle Breeze",
|
||||
"name": "Grace of the Gentle Breeze (WIP)",
|
||||
"name": "Grâce de la douce brise",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
"page": "109"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Step of the Storm",
|
||||
"name": "Step of the Storm (WIP)",
|
||||
"name": "Bond de la tempête",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
"page": "110"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Blistering Retribution",
|
||||
"name": "Blistering Retribution (WIP)",
|
||||
"name": "Rétribution foudroyante",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
"page": "111"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Dance of Fire",
|
||||
"name": "Dance of Fire (WIP)",
|
||||
"name": "Danse du Feu",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
"page": "110"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Volcanic Fist",
|
||||
"name": "Volcanic Fist (WIP)",
|
||||
"name": "Poing volcanique",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
"page": "110"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Fist of Spreading Venom",
|
||||
"name": "Fist of Spreading Venom (WIP)",
|
||||
"name": "Poing propagateur de poison",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
"page": "112"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "River’s Flowing Stride",
|
||||
"name": "River’s Flowing Stride (WIP)",
|
||||
"name": "Allure du cours d’eau",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
"page": "112"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Seeping Ki",
|
||||
"name": "Seeping Ki (WIP)",
|
||||
"name": "Ruissellement de ki",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
"page": "112"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Aura Awareness",
|
||||
"name": "Aura Awareness (WIP)",
|
||||
"name": "Perception des auras",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
"page": "113"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Essence of Stillness",
|
||||
"name": "Essence of Stillness (WIP)",
|
||||
"name": "Essence de l’immobilité",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
"page": "113"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Eternal Mind’s Gate",
|
||||
"name": "Eternal Mind’s Gate (WIP)",
|
||||
"name": "Portail de l’esprit éternel",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
"page": "113"
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
@@ -743,50 +743,50 @@
|
||||
},
|
||||
{
|
||||
"id": "Whispers of the Kami",
|
||||
"name": "Whispers of the Kami (WIP)",
|
||||
"name": "Murmures des kamis",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
"page": "96"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Smiling Mountain Tradition",
|
||||
"name": "Smiling Mountain Tradition (WIP)",
|
||||
"name": "Tradition de la montagne Rieuse",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
"page": "97"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Scaled Hide",
|
||||
"name": "Scaled Hide (WIP)",
|
||||
"name": "Epaisse peau écailleuse",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
"page": "98"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Reflexive Strike",
|
||||
"name": "Reflexive Strike (WIP)",
|
||||
"name": "Attaque réflexe",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
"page": "99"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "A Master of Study",
|
||||
"name": "A Master of Study (WIP)",
|
||||
"name": "Un maître de l’apprentissage",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
"page": "100"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Born to Survive",
|
||||
"name": "Born to Survive (WIP)",
|
||||
"name": "Né pour survivre",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
"page": "101"
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -804,6 +804,86 @@
|
||||
"source_reference": {
|
||||
"page": "25"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Measured Force",
|
||||
"name": "Measured Force (WIP)",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Student of Many Courts",
|
||||
"name": "Student of Many Courts (WIP)",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "The Noble Heart Shines Through",
|
||||
"name": "The Noble Heart Shines Through (WIP)",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Cool Heads Prevail",
|
||||
"name": "Cool Heads Prevail (WIP)",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Procession of Seasons",
|
||||
"name": "Procession of Seasons (WIP)",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Lay of the Land",
|
||||
"name": "Lay of the Land (WIP)",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Logical Conclusion",
|
||||
"name": "Logical Conclusion (WIP)",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Spirit of the Sacred Horse",
|
||||
"name": "Spirit of the Sacred Horse (WIP)",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Reputation Sentinel",
|
||||
"name": "Reputation Sentinel (WIP)",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Legendary Endurance",
|
||||
"name": "Legendary Endurance (WIP)",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -206,7 +206,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Beseech Hida's MIght",
|
||||
"id": "Beseech Hida's Might",
|
||||
"name": "Implorer la puissance de Hida",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
@@ -247,39 +247,95 @@
|
||||
},
|
||||
{
|
||||
"id": "Chikushō-dō’s Guile",
|
||||
"name": "Chikushō-dō’s Guile (WIP)",
|
||||
"name": "Duplicité du Chikushō-dō",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
"page": "118"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Guard Against the Elements",
|
||||
"name": "Guard Against the Elements (WIP)",
|
||||
"name": "Protection contre les éléments",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
"page": "119"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Cunning Snares",
|
||||
"name": "Cunning Snares (WIP)",
|
||||
"name": "Pièges astucieux",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
"page": "119"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Hunter’s Expertise",
|
||||
"name": "Hunter’s Expertise (WIP)",
|
||||
"name": "Expertise du chasseur",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": "119"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Trance of Lives Past",
|
||||
"name": "Transe des vies antérieures",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": "120"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Center the World",
|
||||
"name": "Center the World (WIP)",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Trance of Lives Past",
|
||||
"name": "Trance of Lives Past (WIP)",
|
||||
"id": "Cultural Exchange",
|
||||
"name": "Cultural Exchange (WIP)",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Protection of the Flock",
|
||||
"name": "Protection of the Flock (WIP)",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Shadow of Days",
|
||||
"name": "Shadow of Days (WIP)",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Spiritual Survey",
|
||||
"name": "Spiritual Survey (WIP)",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Traveler's Experience",
|
||||
"name": "Traveler's Experience (WIP)",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Wayfinder's Instincts",
|
||||
"name": "Wayfinder's Instincts (WIP)",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
|
||||
@@ -743,50 +743,50 @@
|
||||
},
|
||||
{
|
||||
"id": "May the Spirits Show the Path",
|
||||
"name": "May the Spirits Show the Path (WIP)",
|
||||
"name": "Que les esprits montrent la voie",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
"page": "96"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Laughter Makes the Home",
|
||||
"name": "Laughter Makes the Home (WIP)",
|
||||
"name": "On rit comme chez soi",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
"page": "97"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Bend Perception",
|
||||
"name": "Bend Perception (WIP)",
|
||||
"name": "Fausser les perceptions",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
"page": "98"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Keen Senses",
|
||||
"name": "Keen Senses (WIP)",
|
||||
"name": "Sens Développés",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
"page": "99"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Mind of Calm",
|
||||
"name": "Mind of Calm (WIP)",
|
||||
"name": "Esprit de calme",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
"page": "100"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Evolution of the Wilds",
|
||||
"name": "Evolution of the Wilds (WIP)",
|
||||
"name": "Evolution de la nature",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
"page": "101"
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -804,6 +804,86 @@
|
||||
"source_reference": {
|
||||
"page": "25"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Moment of Certainty",
|
||||
"name": "Moment of Certainty (WIP)",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Disarming Demeanor",
|
||||
"name": "Disarming Demeanor (WIP)",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "The Horse Lord's Favor",
|
||||
"name": "The Horse Lord's Favor (WIP)",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Calm Counsel",
|
||||
"name": "Calm Counsel (WIP)",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Natural Balance",
|
||||
"name": "Natural Balance (WIP)",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Dunestrider",
|
||||
"name": "Dunestrider (WIP)",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Methodical Observation",
|
||||
"name": "Methodical Observation (WIP)",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Unity of Horse and Rider",
|
||||
"name": "Unity of Horse and Rider (WIP)",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Warden of the Five Winds",
|
||||
"name": "Warden of the Five Winds (WIP)",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Move as the Wind",
|
||||
"name": "Move as the Wind (WIP)",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -708,6 +708,102 @@
|
||||
"source_reference": {
|
||||
"page": "93"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Cunning Omission",
|
||||
"name": "Cunning Omission (WIP)",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Entice with Offerings",
|
||||
"name": "Entice with Offerings (WIP)",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Trader's Intuition",
|
||||
"name": "Trader's Intuition (WIP)",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Cite the Facts",
|
||||
"name": "Cite the Facts (WIP)",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Solidify Gratitude",
|
||||
"name": "Solidify Gratitude (WIP)",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Glorious Entrance",
|
||||
"name": "Glorious Entrance (WIP)",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Incite Wrath",
|
||||
"name": "Incite Wrath (WIP)",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Call to Ride",
|
||||
"name": "Call to Ride (WIP)",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Complementary Experience",
|
||||
"name": "Complementary Experience (WIP)",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Everyone Has a Price",
|
||||
"name": "Everyone Has a Price (WIP)",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Horse Whisperer",
|
||||
"name": "Horse Whisperer (WIP)",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Appreciate the Scenery",
|
||||
"name": "Appreciate the Scenery (WIP)",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -335,34 +335,34 @@
|
||||
},
|
||||
{
|
||||
"id": "Awakened Soul",
|
||||
"name": "Awakened Soul (WIP)",
|
||||
"description": "<h2>Cursus</h2><table><tr><td>Compétences Sociales</td><td>Grp. de comp.</td></tr><tr><td>Compétences Savantes</td><td>Grp. de comp.</td></tr><tr><td>Culture</td><td>Compétence</td></tr><tr><td>Méditation</td><td>Compétence</td></tr><tr><td>Survie</td><td>Compétence</td></tr><tr><td>Théologie</td><td>Compétence</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-link=\"\" data-uuid=\"Compendium.l5r5e.core-techniques-kiho.Item.L5RCoreKih000038\" data-pack=\"l5r5e.core-techniques-kiho\" data-type=\"Item\" data-id=\"L5RCoreKih000038\">(kiho) Eternal Mind’s Gate (WIP)</a> (prereq)</td><td>Technique</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-link=\"\" data-uuid=\"Compendium.l5r5e.core-techniques-rituals.Item.L5RCoreRit000035\" data-pack=\"l5r5e.core-techniques-rituals\" data-type=\"Item\" data-id=\"L5RCoreRit000035\">(ritual) Trance of Lives Past (WIP)</a> (prereq)</td><td>Technique</td></tr></table>",
|
||||
"name": "Ame éveillée",
|
||||
"description": "<h2>Cursus</h2><table><tr><td>Compétences Sociales</td><td>Grp. de comp.</td></tr><tr><td>Compétences Savantes</td><td>Grp. de comp.</td></tr><tr><td>Culture</td><td>Compétence</td></tr><tr><td>Méditation</td><td>Compétence</td></tr><tr><td>Survie</td><td>Compétence</td></tr><tr><td>Théologie</td><td>Compétence</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-link=\"\" data-uuid=\"Compendium.l5r5e.core-techniques-kiho.Item.L5RCoreKih000038\" data-pack=\"l5r5e.core-techniques-kiho\" data-type=\"Item\" data-id=\"L5RCoreKih000038\">(kiho) Portail de l’esprit éternel</a> (prereq)</td><td>Technique</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-link=\"\" data-uuid=\"Compendium.l5r5e.core-techniques-rituals.Item.L5RCoreRit000035\" data-pack=\"l5r5e.core-techniques-rituals\" data-type=\"Item\" data-id=\"L5RCoreRit000035\">(ritual) Transe des vies antérieures</a> (prereq)</td><td>Technique</td></tr></table>",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
"page": "142"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Forester",
|
||||
"name": "Forester (WIP)",
|
||||
"name": "Forestier",
|
||||
"description": "<h2>Cursus</h2><table><tr><td>Compétences Sociales</td><td>Grp. de comp.</td></tr><tr><td>Compétences Savantes</td><td>Grp. de comp.</td></tr><tr><td>Courtoisie</td><td>Compétence</td></tr><tr><td>Sentiments</td><td>Compétence</td></tr><tr><td>Survie</td><td>Compétence</td></tr><tr><td>Théologie</td><td>Compétence</td></tr><tr><td><a class=\"compendium-link\" data-pack=\"l5r5e.core-techniques-invocations\">(invocation) Invocations de la Terre ou de l’Eau de rang 1-2</a> (prereq)</td><td>Tech. Grp.</td></tr><tr><td><a class=\"compendium-link\" data-pack=\"l5r5e.core-techniques-shuji\">(shuji) Shuji de rang 1-3</a> (prereq)</td><td>Tech. Grp.</td></tr></table>",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
"page": "142"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Temple Abbot",
|
||||
"name": "Temple Abbot (WIP)",
|
||||
"description": "<h2>Cursus</h2><table><tr><td>Compétences Sociales</td><td>Grp. de comp.</td></tr><tr><td>Compétences Savantes</td><td>Grp. de comp.</td></tr><tr><td>Culture</td><td>Compétence</td></tr><tr><td>Méditation</td><td>Compétence</td></tr><tr><td>Théologie</td><td>Compétence</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-link=\"\" data-uuid=\"Compendium.l5r5e.core-techniques-rituals.Item.L5RCoreRit000004\" data-pack=\"l5r5e.core-techniques-rituals\" data-type=\"Item\" data-id=\"L5RCoreRit000004\">(ritual) Rite de purification</a> (prereq)</td><td>Technique</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-link=\"\" data-uuid=\"Compendium.l5r5e.core-techniques-kiho.Item.L5RCoreKih000025\" data-pack=\"l5r5e.core-techniques-kiho\" data-type=\"Item\" data-id=\"L5RCoreKih000025\">(kiho) Rejuvenating Breath (WIP)</a> (prereq)</td><td>Technique</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-link=\"\" data-uuid=\"Compendium.l5r5e.core-techniques-shuji.Item.L5RCoreShu000011\" data-pack=\"l5r5e.core-techniques-shuji\" data-type=\"Item\" data-id=\"L5RCoreShu000011\">(shuji) Courage exemplaire</a> (prereq)</td><td>Technique</td></tr></table>",
|
||||
"name": "Abbé",
|
||||
"description": "<h2>Cursus</h2><table><tr><td>Compétences Sociales</td><td>Grp. de comp.</td></tr><tr><td>Compétences Savantes</td><td>Grp. de comp.</td></tr><tr><td>Culture</td><td>Compétence</td></tr><tr><td>Méditation</td><td>Compétence</td></tr><tr><td>Théologie</td><td>Compétence</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-link=\"\" data-uuid=\"Compendium.l5r5e.core-techniques-rituals.Item.L5RCoreRit000004\" data-pack=\"l5r5e.core-techniques-rituals\" data-type=\"Item\" data-id=\"L5RCoreRit000004\">(ritual) Rite de purification</a> (prereq)</td><td>Technique</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-link=\"\" data-uuid=\"Compendium.l5r5e.core-techniques-kiho.Item.L5RCoreKih000025\" data-pack=\"l5r5e.core-techniques-kiho\" data-type=\"Item\" data-id=\"L5RCoreKih000025\">(kiho) Souffle revigorant</a> (prereq)</td><td>Technique</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-link=\"\" data-uuid=\"Compendium.l5r5e.core-techniques-shuji.Item.L5RCoreShu000011\" data-pack=\"l5r5e.core-techniques-shuji\" data-type=\"Item\" data-id=\"L5RCoreShu000011\">(shuji) Courage exemplaire</a> (prereq)</td><td>Technique</td></tr></table>",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
"page": "143"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Yōkai Hunter",
|
||||
"name": "Yōkai Hunter (WIP)",
|
||||
"description": "<h2>Cursus</h2><table><tr><td>Compétences Savantes</td><td>Grp. de comp.</td></tr><tr><td>Compétences Martiales</td><td>Grp. de comp.</td></tr><tr><td>Commandement</td><td>Compétence</td></tr><tr><td>Courtoisie</td><td>Compétence</td></tr><tr><td>Survie</td><td>Compétence</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-link=\"\" data-uuid=\"Compendium.l5r5e.core-techniques-kiho.Item.L5RCoreKih000030\" data-pack=\"l5r5e.core-techniques-kiho\" data-type=\"Item\" data-id=\"L5RCoreKih000030\">(kiho) Blistering Retribution (WIP)</a> (prereq)</td><td>Technique</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-link=\"\" data-uuid=\"Compendium.l5r5e.core-techniques-kata.Item.L5RCoreKat000070\" data-pack=\"l5r5e.core-techniques-kata\" data-type=\"Item\" data-id=\"L5RCoreKat000070\">(kata) Swallow’s Dart Style (WIP)</a> (prereq)</td><td>Technique</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-link=\"\" data-uuid=\"Compendium.l5r5e.core-techniques-kata.Item.L5RCoreKat000071\" data-pack=\"l5r5e.core-techniques-kata\" data-type=\"Item\" data-id=\"L5RCoreKat000071\">(kata) Tiger’s Lunge Style (WIP)</a> (prereq)</td><td>Technique</td></tr></table>",
|
||||
"name": "Chasseur de yōkai",
|
||||
"description": "<h2>Cursus</h2><table><tr><td>Compétences Savantes</td><td>Grp. de comp.</td></tr><tr><td>Compétences Martiales</td><td>Grp. de comp.</td></tr><tr><td>Commandement</td><td>Compétence</td></tr><tr><td>Courtoisie</td><td>Compétence</td></tr><tr><td>Survie</td><td>Compétence</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-link=\"\" data-uuid=\"Compendium.l5r5e.core-techniques-kiho.Item.L5RCoreKih000030\" data-pack=\"l5r5e.core-techniques-kiho\" data-type=\"Item\" data-id=\"L5RCoreKih000030\">(kiho) Rétribution foudroyante</a> (prereq)</td><td>Technique</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-link=\"\" data-uuid=\"Compendium.l5r5e.core-techniques-kata.Item.L5RCoreKat000070\" data-pack=\"l5r5e.core-techniques-kata\" data-type=\"Item\" data-id=\"L5RCoreKat000070\">(kata) Style de la vivacité de l’hirondelle</a> (prereq)</td><td>Technique</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-link=\"\" data-uuid=\"Compendium.l5r5e.core-techniques-kata.Item.L5RCoreKat000071\" data-pack=\"l5r5e.core-techniques-kata\" data-type=\"Item\" data-id=\"L5RCoreKat000071\">(kata) Style de l’attaque du tigre</a> (prereq)</td><td>Technique</td></tr></table>",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
"page": "143"
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -388,6 +388,62 @@
|
||||
"source_reference": {
|
||||
"page": "21"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Animal Handler",
|
||||
"name": "Animal Handler (WIP)",
|
||||
"description": "<h2>Cursus</h2><table><tr><td>Compétences Professionnelles</td><td>Grp. de comp.</td></tr><tr><td>Arts martiaux (mains nues)</td><td>Compétence</td></tr><tr><td>Médecine</td><td>Compétence</td></tr><tr><td>Sentiments</td><td>Compétence</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-link=\"\" data-uuid=\"Compendium.l5r5e.core-techniques-shuji.Item.L5RCoreShu000096\" data-pack=\"l5r5e.core-techniques-shuji\" data-type=\"Item\" data-id=\"L5RCoreShu000096\">(shuji) Call to Ride (WIP)</a> (prereq)</td><td>Technique</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-link=\"\" data-uuid=\"Compendium.l5r5e.core-techniques-shuji.Item.L5RCoreShu000095\" data-pack=\"l5r5e.core-techniques-shuji\" data-type=\"Item\" data-id=\"L5RCoreShu000095\">(shuji) Incite Wrath (WIP)</a> (prereq)</td><td>Technique</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-link=\"\" data-uuid=\"Compendium.l5r5e.core-techniques-shuji.Item.L5RCoreShu000011\" data-pack=\"l5r5e.core-techniques-shuji\" data-type=\"Item\" data-id=\"L5RCoreShu000011\">(shuji) Courage exemplaire</a> (prereq)</td><td>Technique</td></tr></table>",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Doomhunter",
|
||||
"name": "Doomhunter (WIP)",
|
||||
"description": "<h2>Cursus</h2><table><tr><td>Compétences Martiales</td><td>Grp. de comp.</td></tr><tr><td>Magouilles</td><td>Compétence</td></tr><tr><td>Survie</td><td>Compétence</td></tr><tr><td>Théologie</td><td>Compétence</td></tr><tr><td><a class=\"compendium-link\" data-pack=\"l5r5e.core-techniques-rituals\">(ritual) Rituels de rang 1-2</a> (prereq)</td><td>Tech. Grp.</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-link=\"\" data-uuid=\"Compendium.l5r5e.core-techniques-ninjutsu.Item.L5RCoreNin000002\" data-pack=\"l5r5e.core-techniques-ninjutsu\" data-type=\"Item\" data-id=\"L5RCoreNin000002\">(ninjutsu) Disparition</a> (prereq)</td><td>Technique</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-link=\"\" data-uuid=\"Compendium.l5r5e.core-techniques-kata.Item.L5RCoreKat000006\" data-pack=\"l5r5e.core-techniques-kata\" data-type=\"Item\" data-id=\"L5RCoreKat000006\">(kata) Destruction de l’âme</a> (prereq)</td><td>Technique</td></tr></table>",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Imperial Peacekeeper",
|
||||
"name": "Imperial Peacekeeper (WIP)",
|
||||
"description": "<h2>Cursus</h2><table><tr><td>Compétences Martiales</td><td>Grp. de comp.</td></tr><tr><td>Courtoisie</td><td>Compétence</td></tr><tr><td>Commandement</td><td>Compétence</td></tr><tr><td>Sentiments</td><td>Compétence</td></tr><tr><td><a class=\"compendium-link\" data-pack=\"l5r5e.core-techniques-shuji\">(shuji) Shuji de la Terre de rang 1-2</a> (prereq)</td><td>Tech. Grp.</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-link=\"\" data-uuid=\"Compendium.l5r5e.core-techniques-rituals.Item.L5RCoreRit000037\" data-pack=\"l5r5e.core-techniques-rituals\" data-type=\"Item\" data-id=\"L5RCoreRit000037\">(ritual) Cultural Exchange (WIP)</a> (prereq)</td><td>Technique</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-link=\"\" data-uuid=\"Compendium.l5r5e.core-techniques-shuji.Item.L5RCoreShu000016\" data-pack=\"l5r5e.core-techniques-shuji\" data-type=\"Item\" data-id=\"L5RCoreShu000016\">(shuji) Pilier de sérénité</a> (prereq)</td><td>Technique</td></tr></table>",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Interpreter",
|
||||
"name": "Interpreter (WIP)",
|
||||
"description": "<h2>Cursus</h2><table><tr><td>Compétences Sociales</td><td>Grp. de comp.</td></tr><tr><td>Composition</td><td>Compétence</td></tr><tr><td>Culture</td><td>Compétence</td></tr><tr><td>Gouvernement</td><td>Compétence</td></tr><tr><td><a class=\"compendium-link\" data-pack=\"l5r5e.core-techniques-shuji\">(shuji) Shuji de rang 1</a> (prereq)</td><td>Tech. Grp.</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-link=\"\" data-uuid=\"Compendium.l5r5e.core-techniques-rituals.Item.L5RCoreRit000037\" data-pack=\"l5r5e.core-techniques-rituals\" data-type=\"Item\" data-id=\"L5RCoreRit000037\">(ritual) Cultural Exchange (WIP)</a> (prereq)</td><td>Technique</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-link=\"\" data-uuid=\"Compendium.l5r5e.core-techniques-rituals.Item.L5RCoreRit000041\" data-pack=\"l5r5e.core-techniques-rituals\" data-type=\"Item\" data-id=\"L5RCoreRit000041\">(ritual) Traveler's Experience (WIP)</a> (prereq)</td><td>Technique</td></tr></table>",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Scarlet Banners Ranger",
|
||||
"name": "Scarlet Banners Ranger (WIP)",
|
||||
"description": "<h2>Cursus</h2><table><tr><td>Compétences Martiales</td><td>Grp. de comp.</td></tr><tr><td>Compétences Professionnelles</td><td>Grp. de comp.</td></tr><tr><td>Gouvernement</td><td>Compétence</td></tr><tr><td>Sentiments</td><td>Compétence</td></tr><tr><td><a class=\"compendium-link\" data-pack=\"l5r5e.core-techniques-kata\">(kata) Kata de rang 1-2</a> (prereq)</td><td>Tech. Grp.</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-link=\"\" data-uuid=\"Compendium.l5r5e.core-techniques-shuji.Item.L5RCoreShu000089\" data-pack=\"l5r5e.core-techniques-shuji\" data-type=\"Item\" data-id=\"L5RCoreShu000089\">(shuji) Cunning Omission (WIP)</a> (prereq)</td><td>Technique</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-link=\"\" data-uuid=\"Compendium.l5r5e.core-techniques-kata.Item.L5RCoreKat000090\" data-pack=\"l5r5e.core-techniques-kata\" data-type=\"Item\" data-id=\"L5RCoreKat000090\">(kata) Thunderbolt Style (WIP)</a> (prereq)</td><td>Technique</td></tr></table>",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Student of Names",
|
||||
"name": "Student of Names (WIP)",
|
||||
"description": "<h2>Cursus</h2><table><tr><td>Commandement</td><td>Compétence</td></tr><tr><td>Culture</td><td>Compétence</td></tr><tr><td>Survie</td><td>Compétence</td></tr><tr><td>Théologie</td><td>Compétence</td></tr><tr><td><a class=\"compendium-link\" data-pack=\"l5r5e.core-techniques-invocations\">(invocation) Invocations de rang 1-2</a> (prereq)</td><td>Tech. Grp.</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-link=\"\" data-uuid=\"Compendium.l5r5e.core-techniques-rituals.Item.L5RCoreRit000040\" data-pack=\"l5r5e.core-techniques-rituals\" data-type=\"Item\" data-id=\"L5RCoreRit000040\">(ritual) Spiritual Survey (WIP)</a> (prereq)</td><td>Technique</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-link=\"\" data-uuid=\"Compendium.l5r5e.core-techniques-rituals.Item.L5RCoreRit000005\" data-pack=\"l5r5e.core-techniques-rituals\" data-type=\"Item\" data-id=\"L5RCoreRit000005\">(ritual) Seuil infranchissable</a> (prereq)</td><td>Technique</td></tr></table>",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "White Guard Veteran",
|
||||
"name": "White Guard Veteran (WIP)",
|
||||
"description": "<h2>Cursus</h2><table><tr><td>Compétences Martiales</td><td>Grp. de comp.</td></tr><tr><td>Courtoisie</td><td>Compétence</td></tr><tr><td>Commandement</td><td>Compétence</td></tr><tr><td>Survie</td><td>Compétence</td></tr><tr><td>Théologie</td><td>Compétence</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-link=\"\" data-uuid=\"Compendium.l5r5e.core-techniques-shuji.Item.L5RCoreShu000038\" data-pack=\"l5r5e.core-techniques-shuji\" data-type=\"Item\" data-id=\"L5RCoreShu000038\">(shuji) Le destin du samouraï</a> (prereq)</td><td>Technique</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-link=\"\" data-uuid=\"Compendium.l5r5e.core-techniques-kata.Item.L5RCoreKat000083\" data-pack=\"l5r5e.core-techniques-kata\" data-type=\"Item\" data-id=\"L5RCoreKat000083\">(kata) Stalking Leopard Style (WIP)</a> (prereq)</td><td>Technique</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-link=\"\" data-uuid=\"Compendium.l5r5e.core-techniques-kata.Item.L5RCoreKat000084\" data-pack=\"l5r5e.core-techniques-kata\" data-type=\"Item\" data-id=\"L5RCoreKat000084\">(kata) Sudden Downpour Style (WIP)</a> (prereq)</td><td>Technique</td></tr></table>",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -1173,6 +1173,116 @@
|
||||
"source_reference": {
|
||||
"page": "100"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Catalpa Bow",
|
||||
"name": "Catalpa Bow (WIP)",
|
||||
"category": "Arcs",
|
||||
"grip_1": "N/A",
|
||||
"grip_2": "",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Charging Lance",
|
||||
"name": "Charging Lance (WIP)",
|
||||
"category": "Armes d'Hast",
|
||||
"grip_1": "N/A",
|
||||
"grip_2": "",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Fire Lance",
|
||||
"name": "Fire Lance (WIP)",
|
||||
"category": "Armes d'Hast",
|
||||
"grip_1": "N/A",
|
||||
"grip_2": "",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Ganzu Ring Ax",
|
||||
"name": "Ganzu Ring Ax (WIP)",
|
||||
"category": "Haches",
|
||||
"grip_1": "N/A",
|
||||
"grip_2": "",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Katar (Punch Dagger)",
|
||||
"name": "Katar (Punch Dagger) (WIP)",
|
||||
"category": "Armes de Poing",
|
||||
"grip_1": "",
|
||||
"grip_2": "N/A",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Repeating Crossbow",
|
||||
"name": "Repeating Crossbow (WIP)",
|
||||
"category": "Arbalètes",
|
||||
"grip_1": "N/A",
|
||||
"grip_2": "",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Saddle Cutter",
|
||||
"name": "Saddle Cutter (WIP)",
|
||||
"category": "Armes d'Hast",
|
||||
"grip_1": "",
|
||||
"grip_2": "",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Ide Parasol Shield",
|
||||
"name": "Ide Parasol Shield (WIP)",
|
||||
"category": "Boucliers",
|
||||
"grip_1": "",
|
||||
"grip_2": "",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "Standing Shield",
|
||||
"name": "Standing Shield (WIP)",
|
||||
"category": "Boucliers",
|
||||
"grip_1": "",
|
||||
"grip_2": "",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "The Ancestral Sword of the Fox [Blessed Treasure]",
|
||||
"name": "The Ancestral Sword of the Fox [Blessed Treasure] (WIP)",
|
||||
"category": "Sabres",
|
||||
"grip_1": "",
|
||||
"grip_2": "Dangerosité +8",
|
||||
"description": "",
|
||||
"source_reference": {
|
||||
"page": ""
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -21,6 +21,10 @@
|
||||
"SetTn1OnTypeChange": "Set TN to 1 on encounter change",
|
||||
"SetTn1OnTypeChangeHint": "Set the TN to 1 when the encounter type is selected (Intrigue, Duel, Skirmish or Mass battle)"
|
||||
},
|
||||
"ShowAllStatusEffects": {
|
||||
"Title": "Show all StatusEffects",
|
||||
"Hint": "If uncheck (default), only L5R conditions are shown."
|
||||
},
|
||||
"CustomTechniques": {
|
||||
"Title": "Use custom techniques",
|
||||
"Hint": "Add 'Specificity' technique type to serve as a catch-all."
|
||||
@@ -79,6 +83,42 @@
|
||||
}
|
||||
},
|
||||
"l5r5e": {
|
||||
"title": "Legend of the Five Rings",
|
||||
"conditions": {
|
||||
"afflicted": "Afflicted",
|
||||
"bleeding": "Bleeding",
|
||||
"burning": "Burning",
|
||||
"centered": "Centered",
|
||||
"compromised": "Compromised",
|
||||
"dazed": "Dazed",
|
||||
"disoriented": "Disoriented",
|
||||
"dying": "Dying",
|
||||
"emboldened": "Emboldened",
|
||||
"enraged": "Enraged",
|
||||
"exhausted": "Exhausted",
|
||||
"immobilized": "Immobilized",
|
||||
"illness_coughing_illness": "Illness: Coughing Illness",
|
||||
"illness_fire_rash": "Illness: Fire Rash",
|
||||
"illness_gut_sickness": "Illness: Gut Sickness",
|
||||
"illness_oozing_sore_disease": "Illness: Oozing Sore Disease",
|
||||
"illness_unsteady_illness": "Illness: Unsteady Illness",
|
||||
"incapacitated": "Incapacitated",
|
||||
"intoxicated": "Intoxicated",
|
||||
"possessed": "Possessed",
|
||||
"prone": "Prone",
|
||||
"silenced": "Silenced",
|
||||
"unconscious": "Unconscious",
|
||||
"lightly_wounded_fire": "Lightly Wounded (Fire)",
|
||||
"lightly_wounded_water": "Lightly Wounded (Water)",
|
||||
"lightly_wounded_air": "Lightly Wounded (Air)",
|
||||
"lightly_wounded_earth": "Lightly Wounded (Earth)",
|
||||
"lightly_wounded_void": "Lightly Wounded (Void)",
|
||||
"severely_wounded_fire": "Severely Wounded (Fire)",
|
||||
"severely_wounded_water": "Severely Wounded (Water)",
|
||||
"severely_wounded_air": "Severely Wounded (Air)",
|
||||
"severely_wounded_earth": "Severely Wounded (Earth)",
|
||||
"severely_wounded_void": "Severely Wounded (Void)"
|
||||
},
|
||||
"global": {
|
||||
"edge_translation_disclaimer": "",
|
||||
"add": "Add",
|
||||
@@ -103,16 +143,6 @@
|
||||
"others": "Others"
|
||||
}
|
||||
},
|
||||
"settings": {
|
||||
"custom-compendiums": {
|
||||
"title": "Compendiums",
|
||||
"link": "https://gitlab.com/teaml5r/l5r5e/-/wikis/users/custom-compendiums.md"
|
||||
},
|
||||
"wiki": {
|
||||
"title": "Wiki",
|
||||
"link": "https://gitlab.com/teaml5r/l5r5e/-/wikis/home"
|
||||
}
|
||||
},
|
||||
"logo": {
|
||||
"title": "Need help?",
|
||||
"src": "systems/l5r5e/assets/l5r-logo.webp",
|
||||
@@ -132,6 +162,22 @@
|
||||
"title": "FoundryVTT Official Discord",
|
||||
"info": "Your browser will open on the official Foundry discord",
|
||||
"link": "https://discordapp.com/invite/DDBZUDf"
|
||||
},
|
||||
"notes": {
|
||||
"title": "Changelog",
|
||||
"link": "https://gitlab.com/teaml5r/l5r5e/-/blob/master/CHANGELOG.md"
|
||||
},
|
||||
"issues": {
|
||||
"title": "Issues",
|
||||
"link": "https://gitlab.com/teaml5r/l5r5e/-/issues"
|
||||
},
|
||||
"custom-compendiums": {
|
||||
"title": "Compendiums",
|
||||
"link": "https://gitlab.com/teaml5r/l5r5e/-/wikis/users/custom-compendiums.md"
|
||||
},
|
||||
"wiki": {
|
||||
"title": "Wiki",
|
||||
"link": "https://gitlab.com/teaml5r/l5r5e/-/wikis/home"
|
||||
}
|
||||
},
|
||||
"rings": {
|
||||
@@ -645,6 +691,7 @@
|
||||
"boar": "Boar",
|
||||
"dragonfly": "Dragonfly",
|
||||
"firefly": "Firefly",
|
||||
"fox": "Fox",
|
||||
"hare": "Hare",
|
||||
"monkey": "Monkey",
|
||||
"oriole": "Oriole",
|
||||
@@ -672,6 +719,7 @@
|
||||
"capricious": "Capricious",
|
||||
"cautious": "Cautious",
|
||||
"clever": "Clever",
|
||||
"compassionate": "Compassionate",
|
||||
"confused": "Confused",
|
||||
"courageous": "Courageous",
|
||||
"cowardly": "Cowardly",
|
||||
@@ -749,7 +797,8 @@
|
||||
"cresting_waves": "Cresting Waves",
|
||||
"deathly_turns": "Deathly Turns",
|
||||
"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"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,6 +21,10 @@
|
||||
"SetTn1OnTypeChange": "Poner el NO a 1 al seleccionar el tipo de encuentro",
|
||||
"SetTn1OnTypeChangeHint": "Poner el NO a 1 cuando se elige el tipo de encuentro (Intriga, Duelo, Escaramuza o Batalla a gran escala)"
|
||||
},
|
||||
"ShowAllStatusEffects": {
|
||||
"Title": "Show all StatusEffects",
|
||||
"Hint": "If uncheck (default), only L5R conditions are shown."
|
||||
},
|
||||
"CustomTechniques": {
|
||||
"Title": "Use custom techniques",
|
||||
"Hint": "Add 'Specificity' technique type to serve as a catch-all."
|
||||
@@ -79,6 +83,42 @@
|
||||
}
|
||||
},
|
||||
"l5r5e": {
|
||||
"title": "Legend of the five Rings",
|
||||
"conditions": {
|
||||
"afflicted": "Afflicted",
|
||||
"bleeding": "Bleeding",
|
||||
"burning": "Burning",
|
||||
"centered": "Centered",
|
||||
"compromised": "Compromised",
|
||||
"dazed": "Dazed",
|
||||
"disoriented": "Disoriented",
|
||||
"dying": "Dying",
|
||||
"emboldened": "Emboldened",
|
||||
"enraged": "Enraged",
|
||||
"exhausted": "Exhausted",
|
||||
"immobilized": "Immobilized",
|
||||
"illness_coughing_illness": "Illness: Coughing Illness",
|
||||
"illness_fire_rash": "Illness: Fire Rash",
|
||||
"illness_gut_sickness": "Illness: Gut Sickness",
|
||||
"illness_oozing_sore_disease": "Illness: Oozing Sore Disease",
|
||||
"illness_unsteady_illness": "Illness: Unsteady Illness",
|
||||
"incapacitated": "Incapacitated",
|
||||
"intoxicated": "Intoxicated",
|
||||
"possessed": "Possessed",
|
||||
"prone": "Prone",
|
||||
"silenced": "Silenced",
|
||||
"unconscious": "Unconscious",
|
||||
"lightly_wounded_fire": "Lightly Wounded (Fire)",
|
||||
"lightly_wounded_water": "Lightly Wounded (Water)",
|
||||
"lightly_wounded_air": "Lightly Wounded (Air)",
|
||||
"lightly_wounded_earth": "Lightly Wounded (Earth)",
|
||||
"lightly_wounded_void": "Lightly Wounded (Void)",
|
||||
"severely_wounded_fire": "Severely Wounded (Fire)",
|
||||
"severely_wounded_water": "Severely Wounded (Water)",
|
||||
"severely_wounded_air": "Severely Wounded (Air)",
|
||||
"severely_wounded_earth": "Severely Wounded (Earth)",
|
||||
"severely_wounded_void": "Severely Wounded (Void)"
|
||||
},
|
||||
"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.",
|
||||
"add": "Añadir",
|
||||
@@ -103,16 +143,6 @@
|
||||
"others": "Others"
|
||||
}
|
||||
},
|
||||
"settings": {
|
||||
"custom-compendiums": {
|
||||
"title": "Compendiums",
|
||||
"link": "https://gitlab.com/teaml5r/l5r5e/-/wikis/users/custom-compendiums.md"
|
||||
},
|
||||
"wiki": {
|
||||
"title": "Wiki",
|
||||
"link": "https://gitlab.com/teaml5r/l5r5e/-/wikis/home"
|
||||
}
|
||||
},
|
||||
"logo": {
|
||||
"títle": "¿Necesitas ayuda?",
|
||||
"src": "systems/l5r5e/assets/l5r-logo.webp",
|
||||
@@ -132,6 +162,22 @@
|
||||
"title": "Discord oficial de FoundryVTT",
|
||||
"info": "Su navegador se abrirá el discord oficial de Foundry",
|
||||
"link": "https://discordapp.com/invite/DDBZUDf"
|
||||
},
|
||||
"notes": {
|
||||
"title": "Changelog",
|
||||
"link": "https://gitlab.com/teaml5r/l5r5e/-/blob/master/CHANGELOG.md"
|
||||
},
|
||||
"issues": {
|
||||
"title": "Issues",
|
||||
"link": "https://gitlab.com/teaml5r/l5r5e/-/issues"
|
||||
},
|
||||
"custom-compendiums": {
|
||||
"title": "Compendiums",
|
||||
"link": "https://gitlab.com/teaml5r/l5r5e/-/wikis/users/custom-compendiums.md"
|
||||
},
|
||||
"wiki": {
|
||||
"title": "Wiki",
|
||||
"link": "https://gitlab.com/teaml5r/l5r5e/-/wikis/home"
|
||||
}
|
||||
},
|
||||
"rings": {
|
||||
@@ -645,6 +691,7 @@
|
||||
"boar": "Boar",
|
||||
"dragonfly": "Dragonfly",
|
||||
"firefly": "Firefly",
|
||||
"fox": "Fox",
|
||||
"hare": "Hare",
|
||||
"monkey": "Monkey",
|
||||
"oriole": "Oriole",
|
||||
@@ -672,6 +719,7 @@
|
||||
"capricious": "Capricious",
|
||||
"cautious": "Cautious",
|
||||
"clever": "Clever",
|
||||
"compassionate": "Compassionate",
|
||||
"confused": "Confused",
|
||||
"courageous": "Courageous",
|
||||
"cowardly": "Cowardly",
|
||||
@@ -749,7 +797,8 @@
|
||||
"cresting_waves": "Cresting Waves",
|
||||
"deathly_turns": "Deathly Turns",
|
||||
"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"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,6 +21,10 @@
|
||||
"SetTn1OnTypeChange": "ND 1 à la sélection du type de rencontre",
|
||||
"SetTn1OnTypeChangeHint": "Met le ND à 1 lorsqu'on modifie le type de rencontre (Intrigue, Duel, Escarmouche ou Bataille rangée)"
|
||||
},
|
||||
"ShowAllStatusEffects": {
|
||||
"Title": "Affiche tous les StatusEffects",
|
||||
"Hint": "Si décoché (défaut), uniquement les conditions de L5R sont affichées."
|
||||
},
|
||||
"CustomTechniques": {
|
||||
"Title": "Utiliser les techniques personnalisées",
|
||||
"Hint": "Ajoute un type de technique 'Particularités' pour servir de fourre-tout."
|
||||
@@ -79,6 +83,42 @@
|
||||
}
|
||||
},
|
||||
"l5r5e": {
|
||||
"title": "La Légende des Cinq Anneaux",
|
||||
"conditions": {
|
||||
"afflicted": "Tourmenté",
|
||||
"bleeding": "En sang",
|
||||
"burning": "En feu",
|
||||
"centered": "Centered",
|
||||
"compromised": "Compromis",
|
||||
"dazed": "Hébété",
|
||||
"disoriented": "Désorienté",
|
||||
"dying": "Mourant",
|
||||
"emboldened": "Emboldened",
|
||||
"enraged": "Enragé",
|
||||
"exhausted": "Épuisé",
|
||||
"immobilized": "Immobilisé",
|
||||
"illness_coughing_illness": "Maladie : Mauvaise toux",
|
||||
"illness_fire_rash": "Maladie : Rougeurs",
|
||||
"illness_gut_sickness": "Maladie : Mal des entrailles",
|
||||
"illness_oozing_sore_disease": "Maladie : Bubons purulents",
|
||||
"illness_unsteady_illness": "Maladie : Vertiges",
|
||||
"incapacitated": "Hors de combat",
|
||||
"intoxicated": "Ivre",
|
||||
"possessed": "Possédé",
|
||||
"prone": "A terre",
|
||||
"silenced": "Aphone",
|
||||
"unconscious": "Inconscient",
|
||||
"lightly_wounded_fire": "Légèrement Blessé (Feu)",
|
||||
"lightly_wounded_water": "Légèrement Blessé (Eau)",
|
||||
"lightly_wounded_air": "Légèrement Blessé (Air)",
|
||||
"lightly_wounded_earth": "Légèrement Blessé (Terre)",
|
||||
"lightly_wounded_void": "Légèrement Blessé (Vide)",
|
||||
"severely_wounded_fire": "Gravement blessé (Feu)",
|
||||
"severely_wounded_water": "Gravement blessé (Eau)",
|
||||
"severely_wounded_air": "Gravement blessé (Air)",
|
||||
"severely_wounded_earth": "Gravement blessé (Terre)",
|
||||
"severely_wounded_void": "Gravement blessé (Vide)"
|
||||
},
|
||||
"global": {
|
||||
"edge_translation_disclaimer": "",
|
||||
"add": "Ajouter",
|
||||
@@ -103,16 +143,6 @@
|
||||
"others": "Autres"
|
||||
}
|
||||
},
|
||||
"settings": {
|
||||
"custom-compendiums": {
|
||||
"title": "Compendiums",
|
||||
"link": "https://gitlab.com/teaml5r/l5r5e/-/wikis/users/custom-compendiums.md"
|
||||
},
|
||||
"wiki": {
|
||||
"title": "Wiki",
|
||||
"link": "https://gitlab.com/teaml5r/l5r5e/-/wikis/home"
|
||||
}
|
||||
},
|
||||
"logo": {
|
||||
"title": "Besoin d'aide ?",
|
||||
"src": "systems/l5r5e/assets/l5r-logo.webp",
|
||||
@@ -132,6 +162,22 @@
|
||||
"title": "Rejoignez le Discord Francophone",
|
||||
"info": "Votre navigateur va ouvrir le discord francophone de foundry.",
|
||||
"link": "https://discord.gg/pPSDNJk"
|
||||
},
|
||||
"notes": {
|
||||
"title": "Changelog",
|
||||
"link": "https://gitlab.com/teaml5r/l5r5e/-/blob/master/CHANGELOG.md"
|
||||
},
|
||||
"issues": {
|
||||
"title": "Issues",
|
||||
"link": "https://gitlab.com/teaml5r/l5r5e/-/issues"
|
||||
},
|
||||
"custom-compendiums": {
|
||||
"title": "Compendiums",
|
||||
"link": "https://gitlab.com/teaml5r/l5r5e/-/wikis/users/custom-compendiums.md"
|
||||
},
|
||||
"wiki": {
|
||||
"title": "Wiki",
|
||||
"link": "https://gitlab.com/teaml5r/l5r5e/-/wikis/home"
|
||||
}
|
||||
},
|
||||
"rings": {
|
||||
@@ -645,6 +691,7 @@
|
||||
"boar": "Sanglier",
|
||||
"dragonfly": "Libellule",
|
||||
"firefly": "Luciole",
|
||||
"fox": "Renard",
|
||||
"hare": "Lièvre",
|
||||
"monkey": "Singe",
|
||||
"oriole": "Loriot",
|
||||
@@ -672,6 +719,7 @@
|
||||
"capricious": "Capricieuse",
|
||||
"cautious": "Prudente",
|
||||
"clever": "Astucieuse",
|
||||
"compassionate": "Compatissante",
|
||||
"confused": "Confuse",
|
||||
"courageous": "Courageuse",
|
||||
"cowardly": "Lâche",
|
||||
@@ -749,7 +797,8 @@
|
||||
"cresting_waves": "La Crête des Vagues",
|
||||
"deathly_turns": "Détours Mortels",
|
||||
"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"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,6 +21,10 @@
|
||||
"SetTn1OnTypeChange": "Fissa la TN a 1 quando si cambia il conflitto",
|
||||
"SetTn1OnTypeChangeHint": "Fissa la TN a 1 quando si seleziona il tipo di conflitto (Intrigo, Duello, Schermaglia or Battaglia campale)"
|
||||
},
|
||||
"ShowAllStatusEffects": {
|
||||
"Title": "Show all StatusEffects",
|
||||
"Hint": "If uncheck (default), only L5R conditions are shown."
|
||||
},
|
||||
"CustomTechniques": {
|
||||
"Title": "Usa tecniche custom",
|
||||
"Hint": "Aggiunge il tipo 'Speciale' come termine generale."
|
||||
@@ -79,6 +83,42 @@
|
||||
}
|
||||
},
|
||||
"l5r5e": {
|
||||
"title": "Legend of the five Rings",
|
||||
"conditions": {
|
||||
"afflicted": "Afflicted",
|
||||
"bleeding": "Bleeding",
|
||||
"burning": "Burning",
|
||||
"centered": "Centered",
|
||||
"compromised": "Compromised",
|
||||
"dazed": "Dazed",
|
||||
"disoriented": "Disoriented",
|
||||
"dying": "Dying",
|
||||
"emboldened": "Emboldened",
|
||||
"enraged": "Enraged",
|
||||
"exhausted": "Exhausted",
|
||||
"immobilized": "Immobilized",
|
||||
"illness_coughing_illness": "Illness: Coughing Illness",
|
||||
"illness_fire_rash": "Illness: Fire Rash",
|
||||
"illness_gut_sickness": "Illness: Gut Sickness",
|
||||
"illness_oozing_sore_disease": "Illness: Oozing Sore Disease",
|
||||
"illness_unsteady_illness": "Illness: Unsteady Illness",
|
||||
"incapacitated": "Incapacitated",
|
||||
"intoxicated": "Intoxicated",
|
||||
"possessed": "Possessed",
|
||||
"prone": "Prone",
|
||||
"silenced": "Silenced",
|
||||
"unconscious": "Unconscious",
|
||||
"lightly_wounded_fire": "Lightly Wounded (Fire)",
|
||||
"lightly_wounded_water": "Lightly Wounded (Water)",
|
||||
"lightly_wounded_air": "Lightly Wounded (Air)",
|
||||
"lightly_wounded_earth": "Lightly Wounded (Earth)",
|
||||
"lightly_wounded_void": "Lightly Wounded (Void)",
|
||||
"severely_wounded_fire": "Severely Wounded (Fire)",
|
||||
"severely_wounded_water": "Severely Wounded (Water)",
|
||||
"severely_wounded_air": "Severely Wounded (Air)",
|
||||
"severely_wounded_earth": "Severely Wounded (Earth)",
|
||||
"severely_wounded_void": "Severely Wounded (Void)"
|
||||
},
|
||||
"global": {
|
||||
"edge_translation_disclaimer": "",
|
||||
"add": "Aggiungi",
|
||||
@@ -103,16 +143,6 @@
|
||||
"others": "Others"
|
||||
}
|
||||
},
|
||||
"settings": {
|
||||
"wiki": {
|
||||
"custom-compendiums": {
|
||||
"title": "Compendiums",
|
||||
"link": "https://gitlab.com/teaml5r/l5r5e/-/wikis/users/custom-compendiums.md"
|
||||
},
|
||||
"title": "Wiki",
|
||||
"link": "https://gitlab.com/teaml5r/l5r5e/-/wikis/home"
|
||||
}
|
||||
},
|
||||
"logo": {
|
||||
"title": "Bisogno di aiuto?",
|
||||
"src": "systems/l5r5e/assets/l5r-logo.webp",
|
||||
@@ -132,6 +162,22 @@
|
||||
"title": "Discord Ufficiale di FoundryVTT",
|
||||
"info": "Il tuo browser aprirà il Discord ufficiale di Foundry",
|
||||
"link": "https://discordapp.com/invite/DDBZUDf"
|
||||
},
|
||||
"notes": {
|
||||
"title": "Changelog",
|
||||
"link": "https://gitlab.com/teaml5r/l5r5e/-/blob/master/CHANGELOG.md"
|
||||
},
|
||||
"issues": {
|
||||
"title": "Issues",
|
||||
"link": "https://gitlab.com/teaml5r/l5r5e/-/issues"
|
||||
},
|
||||
"custom-compendiums": {
|
||||
"title": "Compendiums",
|
||||
"link": "https://gitlab.com/teaml5r/l5r5e/-/wikis/users/custom-compendiums.md"
|
||||
},
|
||||
"wiki": {
|
||||
"title": "Wiki",
|
||||
"link": "https://gitlab.com/teaml5r/l5r5e/-/wikis/home"
|
||||
}
|
||||
},
|
||||
"rings": {
|
||||
@@ -645,6 +691,7 @@
|
||||
"boar": "Cinghiale",
|
||||
"dragonfly": "Libellula",
|
||||
"firefly": "Lucciola",
|
||||
"fox": "Fox",
|
||||
"hare": "Lepre",
|
||||
"monkey": "Scimmia",
|
||||
"oriole": "Oriolo",
|
||||
@@ -672,6 +719,7 @@
|
||||
"capricious": "Capriccioso",
|
||||
"cautious": "Cauto",
|
||||
"clever": "Furbo",
|
||||
"compassionate": "Compassionate",
|
||||
"confused": "Confuso",
|
||||
"courageous": "Coraggioso",
|
||||
"cowardly": "Codardo",
|
||||
@@ -749,7 +797,8 @@
|
||||
"cresting_waves": "Cresting Waves",
|
||||
"deathly_turns": "Deathly Turns",
|
||||
"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"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,4 +16,7 @@
|
||||
{"_id":"L5RCoreArm000016","name":"Tosei-Gusoku","permission":{"default":0},"type":"armor","data":{"equipped":false,"quantity":1,"weight":"2","rarity":"8","zeni":"50 koku","properties":[{"id":"L5RCorePro000006","name":"Cumbersome"},{"id":"L5RCorePro000015","name":"Durable"},{"id":"L5RCorePro000011","name":"Wargear"}],"armor":{"physical":"4","supernatural":""},"description":"","source_reference":{"source":"shadowlands","page":"106"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/armor.svg","effects":[]}
|
||||
{"_id":"L5RCoreArm000017","name":"Sailor's garb","permission":{"default":0},"type":"armor","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"2","zeni":"1 bu","properties":[{"id":"L5RCorePro000012","name":"Mundane"},{"id":"L5RCorePro000015","name":"Durable"}],"armor":{"physical":"1","supernatural":""},"description":"","source_reference":{"source":"the_mantis_clan","page":"9"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/keikogi.svg","effects":[]}
|
||||
{"_id":"L5RCoreArm000018","name":"Shark leather armor","permission":{"default":0},"type":"armor","data":{"equipped":false,"quantity":1,"weight":"2","rarity":"7","zeni":"25 koku","properties":[{"id":"L5RCorePro000010","name":"Resplendent"}],"armor":{"physical":"2","supernatural":""},"description":"","source_reference":{"source":"the_mantis_clan","page":"9"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/armor.svg","effects":[]}
|
||||
{"_id":"L5RCoreArm000019","name":"The Golden Obi of the Sun Goddess [Blessed Treasure]","permission":{"default":0},"type":"armor","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"10","zeni":"0","properties":[{"id":"L5RCorePro000002","name":"Ceremonial"},{"id":"L5RCorePro000016","name":"Subtle"},{"id":"L5RCorePro000010","name":"Resplendent"}],"armor":{"physical":"3","supernatural":"6"},"description":"","source_reference":{"source":"celestial_realms","page":"97"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/armor.svg","effects":[]}
|
||||
{"_id":"L5RCoreArm000019","name":"The Golden Obi of the Sun Goddess [Blessed Treasure]","permission":{"default":0},"type":"armor","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"10","zeni":"0","properties":[{"id":"L5RCorePro000002","name":"Ceremonial"},{"id":"L5RCorePro000016","name":"Subtle"},{"id":"L5RCorePro000010","name":"Resplendent"}],"armor":{"physical":"3","supernatural":"6"},"description":"","source_reference":{"source":"celestial_realms","page":"97"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/keikogi.svg","effects":[]}
|
||||
{"_id":"L5RCoreArm000020","name":"Mirror Armor","permission":{"default":0},"type":"armor","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"8","zeni":"40 koku","properties":[{"id":"L5RCorePro000011","name":"Wargear"}],"armor":{"physical":"3","supernatural":"1"},"description":"","source_reference":{"source":"children_of_the_five_winds","page":"103"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/armor.svg","effects":[]}
|
||||
{"_id":"L5RCoreArm000021","name":"Unicorn Barding","permission":{"default":0},"type":"armor","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"8","zeni":"65 koku","properties":[{"id":"L5RCorePro000002","name":"Ceremonial"},{"id":"L5RCorePro000010","name":"Resplendent"},{"id":"L5RCorePro000011","name":"Wargear"}],"armor":{"physical":"2","supernatural":""},"description":"","source_reference":{"source":"children_of_the_five_winds","page":"103"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/armor.svg","effects":[]}
|
||||
{"_id":"L5RCoreArm000022","name":"Yuki: The Ancestral Armor of the Unicorn Clan [Blessed Treasure]","permission":{"default":0},"type":"armor","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"10","zeni":"0","properties":[{"id":"L5RCorePro000002","name":"Ceremonial"},{"id":"L5RCorePro000006","name":"Cumbersome"},{"id":"L5RCorePro000015","name":"Durable"},{"id":"L5RCorePro000014","name":"Sacred"},{"id":"L5RCorePro000011","name":"Wargear"}],"armor":{"physical":"6","supernatural":"2"},"description":"","source_reference":{"source":"children_of_the_five_winds","page":"105"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/armor.svg","effects":[]}
|
||||
|
||||
@@ -16,3 +16,6 @@
|
||||
{"_id":"L5RCoreItp000016","name":"Ghostlands Yodhaniya Pattern","permission":{"default":0},"type":"item_pattern","data":{"in_curriculum":false,"xp_used":0,"rank":1,"bought_at_rank":0,"ring":"void","xp_cost":"6","rarity_modifier":"4","linked_property_id":"L5RCorePro000032","description":"","source_reference":{"source":"path_of_waves","page":"117"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item_pattern.svg","effects":[]}
|
||||
{"_id":"L5RCoreItp000017","name":"Kökejin’s Heart of the Wind Pattern","permission":{"default":0},"type":"item_pattern","data":{"in_curriculum":false,"xp_used":0,"rank":1,"bought_at_rank":0,"ring":"void","xp_cost":"8","rarity_modifier":"5","linked_property_id":"L5RCorePro000033","description":"","source_reference":{"source":"path_of_waves","page":"117"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item_pattern.svg","effects":[]}
|
||||
{"_id":"L5RCoreItp000018","name":"Agasha Pattern","permission":{"default":0},"type":"item_pattern","data":{"in_curriculum":false,"xp_used":0,"rank":1,"bought_at_rank":0,"ring":"void","xp_cost":"6","rarity_modifier":"4","linked_property_id":"L5RCorePro000034","description":"","source_reference":{"source":"celestial_realms","page":"105"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item_pattern.svg","effects":[]}
|
||||
{"_id":"L5RCoreItp000019","name":"Ujik Horsebow Pattern","permission":{"default":0},"type":"item_pattern","data":{"in_curriculum":false,"xp_used":0,"rank":1,"bought_at_rank":0,"ring":"void","xp_cost":"4","rarity_modifier":"3","linked_property_id":"L5RCorePro000035","description":"","source_reference":{"source":"children_of_the_five_winds","page":"107"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item_pattern.svg","effects":[]}
|
||||
{"_id":"L5RCoreItp000020","name":"Utsuko Pattern","permission":{"default":0},"type":"item_pattern","data":{"in_curriculum":false,"xp_used":0,"rank":1,"bought_at_rank":0,"ring":"void","xp_cost":"3","rarity_modifier":"4","linked_property_id":"L5RCorePro000036","description":"","source_reference":{"source":"children_of_the_five_winds","page":"107"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item_pattern.svg","effects":[]}
|
||||
{"_id":"L5RCoreItp000021","name":"Watered Steel Pattern","permission":{"default":0},"type":"item_pattern","data":{"in_curriculum":false,"xp_used":0,"rank":1,"bought_at_rank":0,"ring":"void","xp_cost":"8","rarity_modifier":"6","linked_property_id":"L5RCorePro000037","description":"","source_reference":{"source":"children_of_the_five_winds","page":"107"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item_pattern.svg","effects":[]}
|
||||
|
||||
@@ -109,3 +109,13 @@
|
||||
{"_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":"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":"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":"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":"L5RCoreIte000118","name":"Prayer Rug","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"9","zeni":"2 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":"L5RCoreIte000119","name":"Sand Clock","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"6","zeni":"2 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":"L5RCoreIte000120","name":"Traveling Board Games","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"4","zeni":"1 Bu","properties":[],"description":"","source_reference":{"source":"children_of_the_five_winds","page":"103"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]}
|
||||
{"_id":"L5RCoreIte000121","name":"Word of the Prophet","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"9","zeni":"15 Koku","properties":[],"description":"","source_reference":{"source":"children_of_the_five_winds","page":"103"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]}
|
||||
{"_id":"L5RCoreIte000122","name":"Talisman of the Sun [Blessed Treasure]","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"10","zeni":"0","properties":[],"description":"","source_reference":{"source":"children_of_the_five_winds","page":"104"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]}
|
||||
{"_id":"L5RCoreIte000123","name":"Fox Pipe [Blessed Treasure]","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"10","zeni":"0","properties":[],"description":"","source_reference":{"source":"children_of_the_five_winds","page":"105"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]}
|
||||
|
||||
@@ -14,8 +14,11 @@
|
||||
{"_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":"L5RCoreCon000015","name":"Unconscious","content":"<blockquote>Core Rulebook p.273</blockquote>","img":"icons/svg/unconscious.svg","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":"L5RCoreCon000017","name":"Illness: Oozing Sore Disease","content":"<blockquote>Writ of the Wild p.140</blockquote>","img":"systems/l5r5e/assets/icons/social.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/social.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/social.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/social.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/social.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":"icons/svg/eye.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":"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":"icons/svg/poison.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":"icons/svg/daze.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":"icons/svg/fire.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/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/social.svg","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":{}}
|
||||
|
||||
@@ -83,3 +83,6 @@
|
||||
{"_id":"L5RCoreAdv000083","name":"Insomniac","permission":{"default":0},"type":"peculiarity","data":{"in_curriculum":false,"xp_used":0,"rank":0,"bought_at_rank":0,"ring":"void","peculiarity_type":"adversity","types":"Mental","description":"","source_reference":{"source":"writ_of_the_wild","page":"104"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/peculiarity.svg","effects":[]}
|
||||
{"_id":"L5RCoreAdv000084","name":"Out of Shape","permission":{"default":0},"type":"peculiarity","data":{"in_curriculum":false,"xp_used":0,"rank":0,"bought_at_rank":0,"ring":"earth","peculiarity_type":"adversity","types":"Physical","description":"","source_reference":{"source":"writ_of_the_wild","page":"105"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/peculiarity.svg","effects":[]}
|
||||
{"_id":"L5RCoreAdv000085","name":"Stalked by [Creature]","permission":{"default":0},"type":"peculiarity","data":{"in_curriculum":false,"xp_used":0,"rank":0,"bought_at_rank":0,"ring":"earth","peculiarity_type":"adversity","types":"Interpersonal, Mental, Spiritual","description":"","source_reference":{"source":"writ_of_the_wild","page":"105"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/peculiarity.svg","effects":[]}
|
||||
{"_id":"L5RCoreAdv000086","name":"Lost Family History","permission":{"default":0},"type":"peculiarity","data":{"in_curriculum":false,"xp_used":0,"rank":0,"bought_at_rank":0,"ring":"earth","peculiarity_type":"adversity","types":"Interpersonal, Material","description":"","source_reference":{"source":"children_of_the_five_winds","page":"95"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/peculiarity.svg","effects":[]}
|
||||
{"_id":"L5RCoreAdv000087","name":"Penalty","permission":{"default":0},"type":"peculiarity","data":{"in_curriculum":false,"xp_used":0,"rank":0,"bought_at_rank":0,"ring":"fire","peculiarity_type":"adversity","types":"Infamy, Social","description":"","source_reference":{"source":"children_of_the_five_winds","page":"95"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/peculiarity.svg","effects":[]}
|
||||
{"_id":"L5RCoreAdv000088","name":"Schism in Status","permission":{"default":0},"type":"peculiarity","data":{"in_curriculum":false,"xp_used":0,"rank":0,"bought_at_rank":0,"ring":"water","peculiarity_type":"adversity","types":"Infamy, Interpersonal","description":"","source_reference":{"source":"children_of_the_five_winds","page":"96"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/peculiarity.svg","effects":[]}
|
||||
|
||||
@@ -40,3 +40,6 @@
|
||||
{"_id":"L5RCoreAnx000040","name":"Fear of [Common Creature]","permission":{"default":0},"type":"peculiarity","data":{"in_curriculum":false,"xp_used":0,"rank":0,"bought_at_rank":0,"ring":"earth","peculiarity_type":"anxiety","types":"Mental","description":"","source_reference":{"source":"writ_of_the_wild","page":"105"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/peculiarity.svg","effects":[]}
|
||||
{"_id":"L5RCoreAnx000041","name":"Fear of Mediocrity","permission":{"default":0},"type":"peculiarity","data":{"in_curriculum":false,"xp_used":0,"rank":0,"bought_at_rank":0,"ring":"fire","peculiarity_type":"anxiety","types":"Interpersonal, Mental","description":"","source_reference":{"source":"writ_of_the_wild","page":"106"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/peculiarity.svg","effects":[]}
|
||||
{"_id":"L5RCoreAnx000042","name":"Fear of Poison","permission":{"default":0},"type":"peculiarity","data":{"in_curriculum":false,"xp_used":0,"rank":0,"bought_at_rank":0,"ring":"air","peculiarity_type":"anxiety","types":"Mental","description":"","source_reference":{"source":"writ_of_the_wild","page":"106"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/peculiarity.svg","effects":[]}
|
||||
{"_id":"L5RCoreAnx000043","name":"Animal Signs","permission":{"default":0},"type":"peculiarity","data":{"in_curriculum":false,"xp_used":0,"rank":0,"bought_at_rank":0,"ring":"void","peculiarity_type":"anxiety","types":"Mental, Spiritual","description":"","source_reference":{"source":"children_of_the_five_winds","page":"96"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/peculiarity.svg","effects":[]}
|
||||
{"_id":"L5RCoreAnx000044","name":"Disdain for Urban Sprawl","permission":{"default":0},"type":"peculiarity","data":{"in_curriculum":false,"xp_used":0,"rank":0,"bought_at_rank":0,"ring":"earth","peculiarity_type":"anxiety","types":"Mental","description":"","source_reference":{"source":"children_of_the_five_winds","page":"96"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/peculiarity.svg","effects":[]}
|
||||
{"_id":"L5RCoreAnx000045","name":"Tip of the Tongue","permission":{"default":0},"type":"peculiarity","data":{"in_curriculum":false,"xp_used":0,"rank":0,"bought_at_rank":0,"ring":"air","peculiarity_type":"anxiety","types":"Mental","description":"","source_reference":{"source":"children_of_the_five_winds","page":"97"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/peculiarity.svg","effects":[]}
|
||||
|
||||
@@ -69,3 +69,6 @@
|
||||
{"_id":"L5RCoreDis000069","name":"Knowledgeable Wilderness Guide","permission":{"default":0},"type":"peculiarity","data":{"in_curriculum":false,"xp_used":0,"rank":0,"bought_at_rank":0,"ring":"void","peculiarity_type":"distinction","types":"Interpersonal, Spiritual","description":"","source_reference":{"source":"writ_of_the_wild","page":"102"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/peculiarity.svg","effects":[]}
|
||||
{"_id":"L5RCoreDis000070","name":"Skilled Midwife","permission":{"default":0},"type":"peculiarity","data":{"in_curriculum":false,"xp_used":0,"rank":0,"bought_at_rank":0,"ring":"fire","peculiarity_type":"distinction","types":"Interpersonal","description":"","source_reference":{"source":"writ_of_the_wild","page":"102"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/peculiarity.svg","effects":[]}
|
||||
{"_id":"L5RCoreDis000071","name":"Thoughtful Arbiter","permission":{"default":0},"type":"peculiarity","data":{"in_curriculum":false,"xp_used":0,"rank":0,"bought_at_rank":0,"ring":"water","peculiarity_type":"distinction","types":"Interpersonal","description":"","source_reference":{"source":"writ_of_the_wild","page":"102"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/peculiarity.svg","effects":[]}
|
||||
{"_id":"L5RCoreDis000072","name":"Affinity with [Animal Type]","permission":{"default":0},"type":"peculiarity","data":{"in_curriculum":false,"xp_used":0,"rank":0,"bought_at_rank":0,"ring":"void","peculiarity_type":"distinction","types":"Fame, Interpersonal","description":"","source_reference":{"source":"children_of_the_five_winds","page":"93"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/peculiarity.svg","effects":[]}
|
||||
{"_id":"L5RCoreDis000073","name":"Legal Scholarship","permission":{"default":0},"type":"peculiarity","data":{"in_curriculum":false,"xp_used":0,"rank":0,"bought_at_rank":0,"ring":"air","peculiarity_type":"distinction","types":"Interpersonal, Social","description":"","source_reference":{"source":"children_of_the_five_winds","page":"93"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/peculiarity.svg","effects":[]}
|
||||
{"_id":"L5RCoreDis000074","name":"Syncretic Philosophy","permission":{"default":0},"type":"peculiarity","data":{"in_curriculum":false,"xp_used":0,"rank":0,"bought_at_rank":0,"ring":"water","peculiarity_type":"distinction","types":"Interpersonal, Mental","description":"","source_reference":{"source":"children_of_the_five_winds","page":"93"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/peculiarity.svg","effects":[]}
|
||||
|
||||
@@ -41,3 +41,6 @@
|
||||
{"_id":"L5RCorePas000042","name":"Glorious Deeds","permission":{"default":0},"type":"peculiarity","data":{"in_curriculum":false,"xp_used":0,"rank":0,"bought_at_rank":0,"ring":"fire","peculiarity_type":"passion","types":"Martial, Social","description":"","source_reference":{"source":"fields_of_victory","page":"83"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/peculiarity.svg","effects":[]}
|
||||
{"_id":"L5RCorePas000043","name":"Charity","permission":{"default":0},"type":"peculiarity","data":{"in_curriculum":false,"xp_used":0,"rank":0,"bought_at_rank":0,"ring":"water","peculiarity_type":"passion","types":"Interpersonal, Mental","description":"","source_reference":{"source":"writ_of_the_wild","page":"103"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/peculiarity.svg","effects":[]}
|
||||
{"_id":"L5RCorePas000044","name":"Kintsugi","permission":{"default":0},"type":"peculiarity","data":{"in_curriculum":false,"xp_used":0,"rank":0,"bought_at_rank":0,"ring":"earth","peculiarity_type":"passion","types":"Mental, Physical","description":"","source_reference":{"source":"writ_of_the_wild","page":"104"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/peculiarity.svg","effects":[]}
|
||||
{"_id":"L5RCorePas000045","name":"Horse Racing","permission":{"default":0},"type":"peculiarity","data":{"in_curriculum":false,"xp_used":0,"rank":0,"bought_at_rank":0,"ring":"air","peculiarity_type":"passion","types":"Physical","description":"","source_reference":{"source":"children_of_the_five_winds","page":"94"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/peculiarity.svg","effects":[]}
|
||||
{"_id":"L5RCorePas000046","name":"Hot Pot","permission":{"default":0},"type":"peculiarity","data":{"in_curriculum":false,"xp_used":0,"rank":0,"bought_at_rank":0,"ring":"earth","peculiarity_type":"passion","types":"Interpersonal, Physical","description":"","source_reference":{"source":"children_of_the_five_winds","page":"94"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/peculiarity.svg","effects":[]}
|
||||
{"_id":"L5RCorePas000047","name":"Stargazing","permission":{"default":0},"type":"peculiarity","data":{"in_curriculum":false,"xp_used":0,"rank":0,"bought_at_rank":0,"ring":"void","peculiarity_type":"passion","types":"Mental, Spiritual","description":"","source_reference":{"source":"children_of_the_five_winds","page":"94"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/peculiarity.svg","effects":[]}
|
||||
|
||||
@@ -32,3 +32,7 @@
|
||||
{"_id":"L5RCorePro000032","name":"Ghostlands Yodhaniya Pattern","permission":{"default":0},"type":"property","data":{"properties":[],"description":"","source_reference":{"source":"path_of_waves","page":"117"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/property.svg","effects":[]}
|
||||
{"_id":"L5RCorePro000033","name":"Kökejin’s Heart of the Wind Pattern","permission":{"default":0},"type":"property","data":{"properties":[],"description":"","source_reference":{"source":"path_of_waves","page":"117"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/property.svg","effects":[]}
|
||||
{"_id":"L5RCorePro000034","name":"Agasha Pattern","permission":{"default":0},"type":"property","data":{"properties":[],"description":"","source_reference":{"source":"celestial_realms","page":"105"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/property.svg","effects":[]}
|
||||
{"_id":"L5RCorePro000035","name":"Ujik Horsebow Pattern","permission":{"default":0},"type":"property","data":{"properties":[],"description":"","source_reference":{"source":"children_of_the_five_winds","page":"107"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/property.svg","effects":[]}
|
||||
{"_id":"L5RCorePro000036","name":"Utsuko Pattern","permission":{"default":0},"type":"property","data":{"properties":[],"description":"","source_reference":{"source":"children_of_the_five_winds","page":"107"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/property.svg","effects":[]}
|
||||
{"_id":"L5RCorePro000037","name":"Watered Steel Pattern","permission":{"default":0},"type":"property","data":{"properties":[],"description":"","source_reference":{"source":"children_of_the_five_winds","page":"107"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/property.svg","effects":[]}
|
||||
{"_id":"L5RCorePro000038","name":"Hewing","permission":{"default":0},"type":"property","data":{"properties":[],"description":"","source_reference":{"source":"children_of_the_five_winds","page":"116"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/property.svg","effects":[]}
|
||||
|
||||
@@ -73,3 +73,4 @@
|
||||
{"_id":"L5RCoreInv000073","name":"Rain of Ten Thousand Lotuses","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"5","bought_at_rank":0,"ring":"water","skill":"theology","difficulty":"2","technique_type":"invocation","xp_cost":"3","description":"","source_reference":{"source":"celestial_realms","page":"109"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/invocation.svg","effects":[]}
|
||||
{"_id":"L5RCoreInv000074","name":"Path of Beasts","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"3","bought_at_rank":0,"ring":"water","skill":"theology","difficulty":"2","technique_type":"invocation","xp_cost":"3","description":"","source_reference":{"source":"celestial_realms","page":"109"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/invocation.svg","effects":[]}
|
||||
{"_id":"L5RCoreInv000075","name":"Essence of Jade","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"3","bought_at_rank":0,"ring":"earth","skill":"theology","difficulty":"3","technique_type":"invocation","xp_cost":"3","description":"","source_reference":{"source":"shadowlands","page":"114"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/invocation.svg","effects":[]}
|
||||
{"_id":"L5RCoreInv000076","name":"The World is Not Heavy","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"2","bought_at_rank":0,"ring":"water","skill":"theology","difficulty":"3","technique_type":"invocation","xp_cost":"3","description":"","source_reference":{"source":"children_of_the_five_winds","page":"116"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/invocation.svg","effects":[]}
|
||||
|
||||
@@ -78,3 +78,12 @@
|
||||
{"_id":"L5RCoreKat000079","name":"Owl’s Swoop Style","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"3","bought_at_rank":0,"ring":"void","skill":"","difficulty":"","technique_type":"kata","xp_cost":"3","description":"","source_reference":{"source":"writ_of_the_wild","page":"117"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/kata.svg","effects":[]}
|
||||
{"_id":"L5RCoreKat000080","name":"Skittering Shift","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"3","bought_at_rank":0,"ring":"void","skill":"","difficulty":"","technique_type":"kata","xp_cost":"3","description":"","source_reference":{"source":"writ_of_the_wild","page":"118"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/kata.svg","effects":[]}
|
||||
{"_id":"L5RCoreKat000081","name":"Tail Sweep","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"3","bought_at_rank":0,"ring":"void","skill":"","difficulty":"","technique_type":"kata","xp_cost":"3","description":"","source_reference":{"source":"writ_of_the_wild","page":"118"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/kata.svg","effects":[]}
|
||||
{"_id":"L5RCoreKat000082","name":"Cautious Tread","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"1","bought_at_rank":0,"ring":"void","skill":"","difficulty":"","technique_type":"kata","xp_cost":"3","description":"","source_reference":{"source":"children_of_the_five_winds","page":"108"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/kata.svg","effects":[]}
|
||||
{"_id":"L5RCoreKat000083","name":"Stalking Leopard Style","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"2","bought_at_rank":0,"ring":"void","skill":"","difficulty":"","technique_type":"kata","xp_cost":"3","description":"","source_reference":{"source":"children_of_the_five_winds","page":"108"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/kata.svg","effects":[]}
|
||||
{"_id":"L5RCoreKat000084","name":"Sudden Downpour Style","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"3","bought_at_rank":0,"ring":"void","skill":"","difficulty":"","technique_type":"kata","xp_cost":"3","description":"","source_reference":{"source":"children_of_the_five_winds","page":"108"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/kata.svg","effects":[]}
|
||||
{"_id":"L5RCoreKat000085","name":"Swaying Grass Evasion","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"3","bought_at_rank":0,"ring":"void","skill":"","difficulty":"","technique_type":"kata","xp_cost":"3","description":"","source_reference":{"source":"children_of_the_five_winds","page":"108"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/kata.svg","effects":[]}
|
||||
{"_id":"L5RCoreKat000086","name":"Distracting Flurry Style","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"2","bought_at_rank":0,"ring":"void","skill":"melee,unarmed","difficulty":"","technique_type":"kata","xp_cost":"3","description":"","source_reference":{"source":"children_of_the_five_winds","page":"108"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/kata.svg","effects":[]}
|
||||
{"_id":"L5RCoreKat000087","name":"Scouring Wind Style","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"3","bought_at_rank":0,"ring":"void","skill":"melee,unarmed","difficulty":"","technique_type":"kata","xp_cost":"3","description":"","source_reference":{"source":"children_of_the_five_winds","page":"109"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/kata.svg","effects":[]}
|
||||
{"_id":"L5RCoreKat000088","name":"Slashing Sandstorm Style","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"2","bought_at_rank":0,"ring":"void","skill":"melee","difficulty":"","technique_type":"kata","xp_cost":"3","description":"","source_reference":{"source":"children_of_the_five_winds","page":"109"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/kata.svg","effects":[]}
|
||||
{"_id":"L5RCoreKat000089","name":"Descending Swarm Shot","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"3","bought_at_rank":0,"ring":"air","skill":"ranged","difficulty":"3","technique_type":"kata","xp_cost":"3","description":"","source_reference":{"source":"children_of_the_five_winds","page":"110"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/kata.svg","effects":[]}
|
||||
{"_id":"L5RCoreKat000090","name":"Thunderbolt Style","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"4","bought_at_rank":0,"ring":"void","skill":"","difficulty":"","technique_type":"kata","xp_cost":"3","description":"","source_reference":{"source":"children_of_the_five_winds","page":"110"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/kata.svg","effects":[]}
|
||||
|
||||
@@ -98,3 +98,13 @@
|
||||
{"_id":"L5RCoreMas000098","name":"Born to Survive","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"6","bought_at_rank":0,"ring":"void","skill":"","difficulty":"","technique_type":"mastery_ability","xp_cost":"0","description":"","source_reference":{"source":"writ_of_the_wild","page":"101"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/mastery_ability.svg","effects":[]}
|
||||
{"_id":"L5RCoreMas000099","name":"Hunter of the Supernatural","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"6","bought_at_rank":0,"ring":"void","skill":"","difficulty":"","technique_type":"mastery_ability","xp_cost":"0","description":"","source_reference":{"source":"deathly_turns","page":"24"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/mastery_ability.svg","effects":[]}
|
||||
{"_id":"L5RCoreMas000100","name":"An Arrow Loosed","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"6","bought_at_rank":0,"ring":"void","skill":"","difficulty":"","technique_type":"mastery_ability","xp_cost":"0","description":"","source_reference":{"source":"deathly_turns","page":"25"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/mastery_ability.svg","effects":[]}
|
||||
{"_id":"L5RCoreMas000101","name":"Measured Force","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"6","bought_at_rank":0,"ring":"void","skill":"","difficulty":"","technique_type":"mastery_ability","xp_cost":"0","description":"","source_reference":{"source":"children_of_the_five_winds","page":"83"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/mastery_ability.svg","effects":[]}
|
||||
{"_id":"L5RCoreMas000102","name":"Student of Many Courts","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"6","bought_at_rank":0,"ring":"void","skill":"","difficulty":"","technique_type":"mastery_ability","xp_cost":"0","description":"","source_reference":{"source":"children_of_the_five_winds","page":"84"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/mastery_ability.svg","effects":[]}
|
||||
{"_id":"L5RCoreMas000103","name":"The Noble Heart Shines Through","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"6","bought_at_rank":0,"ring":"void","skill":"","difficulty":"","technique_type":"mastery_ability","xp_cost":"0","description":"","source_reference":{"source":"children_of_the_five_winds","page":"85"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/mastery_ability.svg","effects":[]}
|
||||
{"_id":"L5RCoreMas000104","name":"Cool Heads Prevail","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"6","bought_at_rank":0,"ring":"void","skill":"","difficulty":"","technique_type":"mastery_ability","xp_cost":"0","description":"","source_reference":{"source":"children_of_the_five_winds","page":"86"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/mastery_ability.svg","effects":[]}
|
||||
{"_id":"L5RCoreMas000105","name":"Procession of Seasons","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"6","bought_at_rank":0,"ring":"void","skill":"","difficulty":"","technique_type":"mastery_ability","xp_cost":"0","description":"","source_reference":{"source":"children_of_the_five_winds","page":"87"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/mastery_ability.svg","effects":[]}
|
||||
{"_id":"L5RCoreMas000106","name":"Lay of the Land","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"6","bought_at_rank":0,"ring":"void","skill":"","difficulty":"","technique_type":"mastery_ability","xp_cost":"0","description":"","source_reference":{"source":"children_of_the_five_winds","page":"88"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/mastery_ability.svg","effects":[]}
|
||||
{"_id":"L5RCoreMas000107","name":"Logical Conclusion","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"6","bought_at_rank":0,"ring":"void","skill":"","difficulty":"","technique_type":"mastery_ability","xp_cost":"0","description":"","source_reference":{"source":"children_of_the_five_winds","page":"89"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/mastery_ability.svg","effects":[]}
|
||||
{"_id":"L5RCoreMas000108","name":"Spirit of the Sacred Horse","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"6","bought_at_rank":0,"ring":"void","skill":"","difficulty":"","technique_type":"mastery_ability","xp_cost":"0","description":"","source_reference":{"source":"children_of_the_five_winds","page":"90"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/mastery_ability.svg","effects":[]}
|
||||
{"_id":"L5RCoreMas000109","name":"Reputation Sentinel","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"6","bought_at_rank":0,"ring":"void","skill":"","difficulty":"","technique_type":"mastery_ability","xp_cost":"0","description":"","source_reference":{"source":"children_of_the_five_winds","page":"91"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/mastery_ability.svg","effects":[]}
|
||||
{"_id":"L5RCoreMas000110","name":"Legendary Endurance","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"6","bought_at_rank":0,"ring":"void","skill":"","difficulty":"","technique_type":"mastery_ability","xp_cost":"0","description":"","source_reference":{"source":"children_of_the_five_winds","page":"92"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/mastery_ability.svg","effects":[]}
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
{"_id":"L5RCoreRit000023","name":"Beseech Akodo's Judgment","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"3","bought_at_rank":0,"ring":"void","skill":"tactics","difficulty":"3","technique_type":"ritual","xp_cost":"3","description":"","source_reference":{"source":"fields_of_victory","page":"96"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/ritual.svg","effects":[]}
|
||||
{"_id":"L5RCoreRit000024","name":"Beseech Bayushi's Absolution","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"4","bought_at_rank":0,"ring":"air","skill":"sentiment","difficulty":"3","technique_type":"ritual","xp_cost":"3","description":"","source_reference":{"source":"fields_of_victory","page":"96"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/ritual.svg","effects":[]}
|
||||
{"_id":"L5RCoreRit000025","name":"Beseech Doji's Wisdom","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"2","bought_at_rank":0,"ring":"void","skill":"composition","difficulty":"3","technique_type":"ritual","xp_cost":"3","description":"","source_reference":{"source":"fields_of_victory","page":"96"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/ritual.svg","effects":[]}
|
||||
{"_id":"L5RCoreRit000026","name":"Beseech Hida's MIght","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"2","bought_at_rank":0,"ring":"fire","skill":"meditation","difficulty":"2","technique_type":"ritual","xp_cost":"3","description":"","source_reference":{"source":"fields_of_victory","page":"97"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/ritual.svg","effects":[]}
|
||||
{"_id":"L5RCoreRit000026","name":"Beseech Hida's Might","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"2","bought_at_rank":0,"ring":"fire","skill":"meditation","difficulty":"2","technique_type":"ritual","xp_cost":"3","description":"","source_reference":{"source":"fields_of_victory","page":"97"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/ritual.svg","effects":[]}
|
||||
{"_id":"L5RCoreRit000027","name":"Beseech Shiba's Calm","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"3","bought_at_rank":0,"ring":"void","skill":"theology","difficulty":"3","technique_type":"ritual","xp_cost":"3","description":"","source_reference":{"source":"fields_of_victory","page":"97"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/ritual.svg","effects":[]}
|
||||
{"_id":"L5RCoreRit000028","name":"Beseech Shinjo's Empathy","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"2","bought_at_rank":0,"ring":"water","skill":"survival","difficulty":"@T:martialRank","technique_type":"ritual","xp_cost":"3","description":"","source_reference":{"source":"fields_of_victory","page":"97"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/ritual.svg","effects":[]}
|
||||
{"_id":"L5RCoreRit000029","name":"Beseech Togashi's Vision","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"3","bought_at_rank":0,"ring":"void","skill":"meditation","difficulty":"3","technique_type":"ritual","xp_cost":"3","description":"","source_reference":{"source":"fields_of_victory","page":"98"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/ritual.svg","effects":[]}
|
||||
@@ -33,3 +33,10 @@
|
||||
{"_id":"L5RCoreRit000033","name":"Cunning Snares","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"2","bought_at_rank":0,"ring":"air","skill":"survival","difficulty":"1","technique_type":"ritual","xp_cost":"3","description":"","source_reference":{"source":"writ_of_the_wild","page":"119"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/ritual.svg","effects":[]}
|
||||
{"_id":"L5RCoreRit000034","name":"Hunter’s Expertise","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"3","bought_at_rank":0,"ring":"air","skill":"survival","difficulty":"5","technique_type":"ritual","xp_cost":"3","description":"","source_reference":{"source":"writ_of_the_wild","page":"120"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/ritual.svg","effects":[]}
|
||||
{"_id":"L5RCoreRit000035","name":"Trance of Lives Past","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"4","bought_at_rank":0,"ring":"void","skill":"meditation","difficulty":"4","technique_type":"ritual","xp_cost":"3","description":"","source_reference":{"source":"writ_of_the_wild","page":"120"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/ritual.svg","effects":[]}
|
||||
{"_id":"L5RCoreRit000036","name":"Center the World","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"3","bought_at_rank":0,"ring":"air","skill":"survival","difficulty":"3","technique_type":"ritual","xp_cost":"3","description":"","source_reference":{"source":"children_of_the_five_winds","page":"110"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/ritual.svg","effects":[]}
|
||||
{"_id":"L5RCoreRit000037","name":"Cultural Exchange","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"1","bought_at_rank":0,"ring":"fire","skill":"culture","difficulty":"2","technique_type":"ritual","xp_cost":"3","description":"","source_reference":{"source":"children_of_the_five_winds","page":"110"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/ritual.svg","effects":[]}
|
||||
{"_id":"L5RCoreRit000038","name":"Protection of the Flock","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"2","bought_at_rank":0,"ring":"fire","skill":"survival","difficulty":"2","technique_type":"ritual","xp_cost":"3","description":"","source_reference":{"source":"children_of_the_five_winds","page":"111"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/ritual.svg","effects":[]}
|
||||
{"_id":"L5RCoreRit000039","name":"Shadow of Days","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"3","bought_at_rank":0,"ring":"earth","skill":"survival","difficulty":"4","technique_type":"ritual","xp_cost":"3","description":"","source_reference":{"source":"children_of_the_five_winds","page":"111"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/ritual.svg","effects":[]}
|
||||
{"_id":"L5RCoreRit000040","name":"Spiritual Survey","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"2","bought_at_rank":0,"ring":"void","skill":"survival","difficulty":"3","technique_type":"ritual","xp_cost":"3","description":"","source_reference":{"source":"children_of_the_five_winds","page":"111"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/ritual.svg","effects":[]}
|
||||
{"_id":"L5RCoreRit000041","name":"Traveler's Experience","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"2","bought_at_rank":0,"ring":"earth","skill":"culture","difficulty":"2","technique_type":"ritual","xp_cost":"3","description":"","source_reference":{"source":"children_of_the_five_winds","page":"112"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/ritual.svg","effects":[]}
|
||||
{"_id":"L5RCoreRit000042","name":"Wayfinder's Instincts","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"2","bought_at_rank":0,"ring":"water","skill":"survival,seafaring","difficulty":"2","technique_type":"ritual","xp_cost":"3","description":"","source_reference":{"source":"children_of_the_five_winds","page":"112"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/ritual.svg","effects":[]}
|
||||
|
||||
@@ -98,3 +98,13 @@
|
||||
{"_id":"L5RCoreSch000098","name":"Evolution of the Wilds","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"1","bought_at_rank":0,"ring":"void","skill":"","difficulty":"","technique_type":"school_ability","xp_cost":"0","description":"","source_reference":{"source":"writ_of_the_wild","page":"101"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/school_ability.svg","effects":[]}
|
||||
{"_id":"L5RCoreSch000099","name":"Mazoku's Authority","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"1","bought_at_rank":0,"ring":"void","skill":"","difficulty":"","technique_type":"school_ability","xp_cost":"0","description":"","source_reference":{"source":"deathly_turns","page":"24"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/school_ability.svg","effects":[]}
|
||||
{"_id":"L5RCoreSch000100","name":"Effortless Aim","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"1","bought_at_rank":0,"ring":"void","skill":"","difficulty":"","technique_type":"school_ability","xp_cost":"0","description":"","source_reference":{"source":"deathly_turns","page":"25"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/school_ability.svg","effects":[]}
|
||||
{"_id":"L5RCoreSch000101","name":"Moment of Certainty","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"1","bought_at_rank":0,"ring":"void","skill":"","difficulty":"","technique_type":"school_ability","xp_cost":"0","description":"","source_reference":{"source":"children_of_the_five_winds","page":"83"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/school_ability.svg","effects":[]}
|
||||
{"_id":"L5RCoreSch000102","name":"Disarming Demeanor","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"1","bought_at_rank":0,"ring":"void","skill":"","difficulty":"","technique_type":"school_ability","xp_cost":"0","description":"","source_reference":{"source":"children_of_the_five_winds","page":"84"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/school_ability.svg","effects":[]}
|
||||
{"_id":"L5RCoreSch000103","name":"The Horse Lord's Favor","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"1","bought_at_rank":0,"ring":"void","skill":"","difficulty":"","technique_type":"school_ability","xp_cost":"0","description":"","source_reference":{"source":"children_of_the_five_winds","page":"85"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/school_ability.svg","effects":[]}
|
||||
{"_id":"L5RCoreSch000104","name":"Calm Counsel","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"1","bought_at_rank":0,"ring":"void","skill":"","difficulty":"","technique_type":"school_ability","xp_cost":"0","description":"","source_reference":{"source":"children_of_the_five_winds","page":"86"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/school_ability.svg","effects":[]}
|
||||
{"_id":"L5RCoreSch000105","name":"Natural Balance","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"1","bought_at_rank":0,"ring":"void","skill":"","difficulty":"","technique_type":"school_ability","xp_cost":"0","description":"","source_reference":{"source":"children_of_the_five_winds","page":"87"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/school_ability.svg","effects":[]}
|
||||
{"_id":"L5RCoreSch000106","name":"Dunestrider","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"1","bought_at_rank":0,"ring":"void","skill":"","difficulty":"","technique_type":"school_ability","xp_cost":"0","description":"","source_reference":{"source":"children_of_the_five_winds","page":"88"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/school_ability.svg","effects":[]}
|
||||
{"_id":"L5RCoreSch000107","name":"Methodical Observation","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"1","bought_at_rank":0,"ring":"void","skill":"","difficulty":"","technique_type":"school_ability","xp_cost":"0","description":"","source_reference":{"source":"children_of_the_five_winds","page":"89"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/school_ability.svg","effects":[]}
|
||||
{"_id":"L5RCoreSch000108","name":"Unity of Horse and Rider","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"1","bought_at_rank":0,"ring":"void","skill":"","difficulty":"","technique_type":"school_ability","xp_cost":"0","description":"","source_reference":{"source":"children_of_the_five_winds","page":"90"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/school_ability.svg","effects":[]}
|
||||
{"_id":"L5RCoreSch000109","name":"Warden of the Five Winds","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"1","bought_at_rank":0,"ring":"void","skill":"","difficulty":"","technique_type":"school_ability","xp_cost":"0","description":"","source_reference":{"source":"children_of_the_five_winds","page":"91"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/school_ability.svg","effects":[]}
|
||||
{"_id":"L5RCoreSch000110","name":"Move as the Wind","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"1","bought_at_rank":0,"ring":"void","skill":"","difficulty":"","technique_type":"school_ability","xp_cost":"0","description":"","source_reference":{"source":"children_of_the_five_winds","page":"92"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/school_ability.svg","effects":[]}
|
||||
|
||||
@@ -86,3 +86,15 @@
|
||||
{"_id":"L5RCoreShu000086","name":"Moment of Glory","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"3","bought_at_rank":0,"ring":"void","skill":"meditation","difficulty":"4","technique_type":"shuji","xp_cost":"3","description":"","source_reference":{"source":"fields_of_victory","page":"104"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/shuji.svg","effects":[]}
|
||||
{"_id":"L5RCoreShu000087","name":"Victory Without a Sword","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"6","bought_at_rank":0,"ring":"void","skill":"tactics","difficulty":"6","technique_type":"shuji","xp_cost":"3","description":"","source_reference":{"source":"fields_of_victory","page":"104"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/shuji.svg","effects":[]}
|
||||
{"_id":"L5RCoreShu000088","name":"Flowering Deceptions","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"1","bought_at_rank":0,"ring":"air","skill":"courtesy,tactics","difficulty":"@T:vigilance|max","technique_type":"shuji","xp_cost":"3","description":"","source_reference":{"source":"path_of_waves","page":"93"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/shuji.svg","effects":[]}
|
||||
{"_id":"L5RCoreShu000089","name":"Cunning Omission","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"3","bought_at_rank":0,"ring":"air","skill":"sentiment","difficulty":"","technique_type":"shuji","xp_cost":"3","description":"","source_reference":{"source":"children_of_the_five_winds","page":"112"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/shuji.svg","effects":[]}
|
||||
{"_id":"L5RCoreShu000090","name":"Entice with Offerings","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"3","bought_at_rank":0,"ring":"air","skill":"commerce","difficulty":"3","technique_type":"shuji","xp_cost":"3","description":"","source_reference":{"source":"children_of_the_five_winds","page":"113"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/shuji.svg","effects":[]}
|
||||
{"_id":"L5RCoreShu000091","name":"Trader's Intuition","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"2","bought_at_rank":0,"ring":"air","skill":"commerce","difficulty":"2","technique_type":"shuji","xp_cost":"3","description":"","source_reference":{"source":"children_of_the_five_winds","page":"113"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/shuji.svg","effects":[]}
|
||||
{"_id":"L5RCoreShu000092","name":"Cite the Facts","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"2","bought_at_rank":0,"ring":"earth","skill":"scholar","difficulty":"","technique_type":"shuji","xp_cost":"3","description":"","source_reference":{"source":"children_of_the_five_winds","page":"114"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/shuji.svg","effects":[]}
|
||||
{"_id":"L5RCoreShu000093","name":"Solidify Gratitude","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"2","bought_at_rank":0,"ring":"earth","skill":"courtesy","difficulty":"2","technique_type":"shuji","xp_cost":"3","description":"","source_reference":{"source":"children_of_the_five_winds","page":"114"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/shuji.svg","effects":[]}
|
||||
{"_id":"L5RCoreShu000094","name":"Glorious Entrance","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"2","bought_at_rank":0,"ring":"fire","skill":"performance","difficulty":"","technique_type":"shuji","xp_cost":"3","description":"","source_reference":{"source":"children_of_the_five_winds","page":"114"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/shuji.svg","effects":[]}
|
||||
{"_id":"L5RCoreShu000095","name":"Incite Wrath","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"3","bought_at_rank":0,"ring":"fire","skill":"","difficulty":"","technique_type":"shuji","xp_cost":"3","description":"","source_reference":{"source":"children_of_the_five_winds","page":"114"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/shuji.svg","effects":[]}
|
||||
{"_id":"L5RCoreShu000096","name":"Call to Ride","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"1","bought_at_rank":0,"ring":"water","skill":"survival","difficulty":"1","technique_type":"shuji","xp_cost":"3","description":"","source_reference":{"source":"children_of_the_five_winds","page":"115"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/shuji.svg","effects":[]}
|
||||
{"_id":"L5RCoreShu000097","name":"Complementary Experience","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"3","bought_at_rank":0,"ring":"water","skill":"command","difficulty":"3","technique_type":"shuji","xp_cost":"3","description":"","source_reference":{"source":"children_of_the_five_winds","page":"115"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/shuji.svg","effects":[]}
|
||||
{"_id":"L5RCoreShu000098","name":"Everyone Has a Price","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"4","bought_at_rank":0,"ring":"water","skill":"sentiment","difficulty":"","technique_type":"shuji","xp_cost":"3","description":"","source_reference":{"source":"children_of_the_five_winds","page":"115"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/shuji.svg","effects":[]}
|
||||
{"_id":"L5RCoreShu000099","name":"Horse Whisperer","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"3","bought_at_rank":0,"ring":"water","skill":"courtesy,survival","difficulty":"","technique_type":"shuji","xp_cost":"3","description":"","source_reference":{"source":"children_of_the_five_winds","page":"115"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/shuji.svg","effects":[]}
|
||||
{"_id":"L5RCoreShu000100","name":"Appreciate the Scenery","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"1","bought_at_rank":0,"ring":"void","skill":"","difficulty":"","technique_type":"shuji","xp_cost":"3","description":"","source_reference":{"source":"children_of_the_five_winds","page":"116"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/shuji.svg","effects":[]}
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
{"_id":"L5RCoreTit000032","name":"Quartermaster","permission":{"default":0},"type":"title","data":{"in_curriculum":false,"xp_used":0,"rank":1,"bought_at_rank":0,"ring":"void","xp_cost":"24","description":"<h2>Curriculum</h2><table><tr><td>Trade Skills</td><td>Skill Group</td></tr><tr><td>Courtesy</td><td>Skill</td></tr><tr><td>Government</td><td>Skill</td></tr><tr><td>Tactics</td><td>Skill</td></tr><tr><td><a class=\"compendium-link\" data-pack=\"l5r5e.core-techniques-shuji\">(shuji) Rank 1-2 Air Shuji</a> (prereq)</td><td>Tech. Grp.</td></tr><tr><td><a class=\"compendium-link\" data-pack=\"l5r5e.core-techniques-shuji\">(shuji) Rank 1-2 Water Shuji</a> (prereq)</td><td>Tech. Grp.</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-link=\"\" data-uuid=\"Compendium.l5r5e.core-techniques-shuji.Item.L5RCoreShu000075\" data-pack=\"l5r5e.core-techniques-shuji\" data-type=\"Item\" data-id=\"L5RCoreShu000075\">(shuji) Fortress of Necessity</a> (prereq)</td><td>Technique</td></tr></table>","source_reference":{"source":"fields_of_victory","page":"135"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/title.svg","effects":[]}
|
||||
{"_id":"L5RCoreTit000033","name":"Renowned Warrior","permission":{"default":0},"type":"title","data":{"in_curriculum":false,"xp_used":0,"rank":1,"bought_at_rank":0,"ring":"void","xp_cost":"16","description":"<h2>Curriculum</h2><table><tr><td>Martial Skills</td><td>Skill Group</td></tr><tr><td>Command</td><td>Skill</td></tr><tr><td>Culture</td><td>Skill</td></tr><tr><td>Performance</td><td>Skill</td></tr><tr><td><a class=\"compendium-link\" data-pack=\"l5r5e.core-techniques-kata\">(kata) Rank 1-2 Kata</a> (prereq)</td><td>Tech. Grp.</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-link=\"\" data-uuid=\"Compendium.l5r5e.core-techniques-kata.Item.L5RCoreKat000003\" data-pack=\"l5r5e.core-techniques-kata\" data-type=\"Item\" data-id=\"L5RCoreKat000003\">(kata) Heartpiercing Strike</a> (prereq)</td><td>Technique</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-link=\"\" data-uuid=\"Compendium.l5r5e.core-techniques-shuji.Item.L5RCoreShu000079\" data-pack=\"l5r5e.core-techniques-shuji\" data-type=\"Item\" data-id=\"L5RCoreShu000079\">(shuji) Righteous Example</a> (prereq)</td><td>Technique</td></tr></table>","source_reference":{"source":"fields_of_victory","page":"135"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/title.svg","effects":[]}
|
||||
{"_id":"L5RCoreTit000034","name":"Spirit Caller","permission":{"default":0},"type":"title","data":{"in_curriculum":false,"xp_used":0,"rank":1,"bought_at_rank":0,"ring":"void","xp_cost":"38","description":"<h2>Curriculum</h2><table><tr><td>Scholar Skills</td><td>Skill Group</td></tr><tr><td>Courtesy</td><td>Skill</td></tr><tr><td>Meditation</td><td>Skill</td></tr><tr><td>Performance</td><td>Skill</td></tr><tr><td><a class=\"compendium-link\" data-pack=\"l5r5e.core-techniques-rituals\">(ritual) Rank 1-2 Rituals</a> (prereq)</td><td>Tech. Grp.</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-link=\"\" data-uuid=\"Compendium.l5r5e.core-techniques-shuji.Item.L5RCoreShu000010\" data-pack=\"l5r5e.core-techniques-shuji\" data-type=\"Item\" data-id=\"L5RCoreShu000010\">(shuji) Ancestry Unearthed</a> (prereq)</td><td>Technique</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-link=\"\" data-uuid=\"Compendium.l5r5e.core-techniques-shuji.Item.L5RCoreShu000083\" data-pack=\"l5r5e.core-techniques-shuji\" data-type=\"Item\" data-id=\"L5RCoreShu000083\">(shuji) Preserve Strength</a> (prereq)</td><td>Technique</td></tr></table>","source_reference":{"source":"fields_of_victory","page":"136"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/title.svg","effects":[]}
|
||||
{"_id":"L5RCoreTit000035","name":"Sumai Master","permission":{"default":0},"type":"title","data":{"in_curriculum":false,"xp_used":0,"rank":1,"bought_at_rank":0,"ring":"void","xp_cost":"30","description":"<h2>Curriculum</h2><table><tr><td>Social Skills</td><td>Skill Group</td></tr><tr><td>Culture</td><td>Skill</td></tr><tr><td>Martial Arts [Unarmed]</td><td>Skill</td></tr><tr><td>Theology</td><td>Skill</td></tr><tr><td><a class=\"compendium-link\" data-pack=\"l5r5e.core-techniques-kata\">(kata) Rank 1-2 Kata</a> (prereq)</td><td>Tech. Grp.</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-link=\"\" data-uuid=\"Compendium.l5r5e.core-techniques-rituals.Item.L5RCoreRit000026\" data-pack=\"l5r5e.core-techniques-rituals\" data-type=\"Item\" data-id=\"L5RCoreRit000026\">(ritual) Beseech Hida's MIght</a> (prereq)</td><td>Technique</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-link=\"\" data-uuid=\"Compendium.l5r5e.core-techniques-kata.Item.L5RCoreKat000065\" data-pack=\"l5r5e.core-techniques-kata\" data-type=\"Item\" data-id=\"L5RCoreKat000065\">(kata) Fierce Badger Style</a> (prereq)</td><td>Technique</td></tr></table>","source_reference":{"source":"fields_of_victory","page":"136"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/title.svg","effects":[]}
|
||||
{"_id":"L5RCoreTit000035","name":"Sumai Master","permission":{"default":0},"type":"title","data":{"in_curriculum":false,"xp_used":0,"rank":1,"bought_at_rank":0,"ring":"void","xp_cost":"30","description":"<h2>Curriculum</h2><table><tr><td>Social Skills</td><td>Skill Group</td></tr><tr><td>Culture</td><td>Skill</td></tr><tr><td>Martial Arts [Unarmed]</td><td>Skill</td></tr><tr><td>Theology</td><td>Skill</td></tr><tr><td><a class=\"compendium-link\" data-pack=\"l5r5e.core-techniques-kata\">(kata) Rank 1-2 Kata</a> (prereq)</td><td>Tech. Grp.</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-link=\"\" data-uuid=\"Compendium.l5r5e.core-techniques-rituals.Item.L5RCoreRit000026\" data-pack=\"l5r5e.core-techniques-rituals\" data-type=\"Item\" data-id=\"L5RCoreRit000026\">(ritual) Beseech Hida's Might</a> (prereq)</td><td>Technique</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-link=\"\" data-uuid=\"Compendium.l5r5e.core-techniques-kata.Item.L5RCoreKat000065\" data-pack=\"l5r5e.core-techniques-kata\" data-type=\"Item\" data-id=\"L5RCoreKat000065\">(kata) Fierce Badger Style</a> (prereq)</td><td>Technique</td></tr></table>","source_reference":{"source":"fields_of_victory","page":"136"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/title.svg","effects":[]}
|
||||
{"_id":"L5RCoreTit000036","name":"Sword Saint","permission":{"default":0},"type":"title","data":{"in_curriculum":false,"xp_used":0,"rank":1,"bought_at_rank":0,"ring":"void","xp_cost":"24","description":"<h2>Curriculum</h2><table><tr><td>Martial Arts [Melee]</td><td>Skill</td></tr><tr><td>Meditation</td><td>Skill</td></tr><tr><td>Smithing</td><td>Skill</td></tr><tr><td>Tactics</td><td>Skill</td></tr><tr><td><a class=\"compendium-link\" data-pack=\"l5r5e.core-techniques-kata\">(kata) Rank 1-5 Close Combat Kata</a> (prereq)</td><td>Tech. Grp.</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-link=\"\" data-uuid=\"Compendium.l5r5e.core-techniques-kata.Item.L5RCoreKat000006\" data-pack=\"l5r5e.core-techniques-kata\" data-type=\"Item\" data-id=\"L5RCoreKat000006\">(kata) Soul Sunder</a> (prereq)</td><td>Technique</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-link=\"\" data-uuid=\"Compendium.l5r5e.core-techniques-shuji.Item.L5RCoreShu000087\" data-pack=\"l5r5e.core-techniques-shuji\" data-type=\"Item\" data-id=\"L5RCoreShu000087\">(shuji) Victory Without a Sword</a> (prereq)</td><td>Technique</td></tr></table>","source_reference":{"source":"fields_of_victory","page":"136"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/title.svg","effects":[]}
|
||||
{"_id":"L5RCoreTit000037","name":"War College Graduate","permission":{"default":0},"type":"title","data":{"in_curriculum":false,"xp_used":0,"rank":1,"bought_at_rank":0,"ring":"void","xp_cost":"36","description":"<h2>Curriculum</h2><table><tr><td>Martial Skills</td><td>Skill Group</td></tr><tr><td>Command</td><td>Skill Group</td></tr><tr><td>Culture</td><td>Skill</td></tr><tr><td>Government</td><td>Skill</td></tr><tr><td><a class=\"compendium-link\" data-pack=\"l5r5e.core-techniques-kata\">(kata) Rank 1-3 Kata</a> (prereq)</td><td>Tech. Grp.</td></tr><tr><td><a class=\"compendium-link\" data-pack=\"l5r5e.core-techniques-shuji\">(shuji) Rank 1-3 Shuji</a> (prereq)</td><td>Tech. Grp.</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-link=\"\" data-uuid=\"Compendium.l5r5e.core-techniques-rituals.Item.L5RCoreRit000023\" data-pack=\"l5r5e.core-techniques-rituals\" data-type=\"Item\" data-id=\"L5RCoreRit000023\">(ritual) Beseech Akodo's Judgment</a> (prereq)</td><td>Technique</td></tr></table>","source_reference":{"source":"fields_of_victory","page":"137"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/title.svg","effects":[]}
|
||||
{"_id":"L5RCoreTit000038","name":"In Service to a Lord","permission":{"default":0},"type":"title","data":{"in_curriculum":false,"xp_used":0,"rank":1,"bought_at_rank":0,"ring":"void","xp_cost":"24","description":"<h2>Curriculum</h2><table><tr><td>Martial Skills</td><td>Skill Group</td></tr><tr><td>Social Skills</td><td>Skill Group</td></tr><tr><td>Culture</td><td>Skill</td></tr><tr><td>Government</td><td>Skill</td></tr><tr><td><a class=\"compendium-link\" data-pack=\"l5r5e.core-techniques-kata\">(kata) Rank 1-2 Kata</a> (prereq)</td><td>Tech. Grp.</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-link=\"\" data-uuid=\"Compendium.l5r5e.core-techniques-shuji.Item.L5RCoreShu000009\" data-pack=\"l5r5e.core-techniques-shuji\" data-type=\"Item\" data-id=\"L5RCoreShu000009\">(shuji) Wolf’s Proposal</a> (prereq)</td><td>Technique</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-link=\"\" data-uuid=\"Compendium.l5r5e.core-techniques-shuji.Item.L5RCoreShu000066\" data-pack=\"l5r5e.core-techniques-shuji\" data-type=\"Item\" data-id=\"L5RCoreShu000066\">(shuji) Fluent Bargaining</a> (prereq)</td><td>Technique</td></tr></table>","source_reference":{"source":"path_of_waves","page":"185"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/title.svg","effects":[]}
|
||||
@@ -46,3 +46,10 @@
|
||||
{"_id":"L5RCoreTit000046","name":"Bond with a spirit","permission":{"default":0},"type":"title","data":{"in_curriculum":false,"xp_used":0,"rank":1,"bought_at_rank":0,"ring":"void","xp_cost":"25","description":"<h2>Curriculum</h2><table><tr><td>Scholar Skills</td><td>Skill Group</td></tr><tr><td>Aesthetics</td><td>Skill</td></tr><tr><td>Games</td><td>Skill</td></tr><tr><td>Meditation</td><td>Skill</td></tr><tr><td><a class=\"compendium-link\" data-pack=\"l5r5e.core-techniques-invocations\">(invocation) Rank 1 Spirit's Elements Invocations</a> (prereq)</td><td>Tech. Grp.</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-link=\"\" data-uuid=\"Compendium.l5r5e.core-techniques-rituals.Item.L5RCoreRit000002\" data-pack=\"l5r5e.core-techniques-rituals\" data-type=\"Item\" data-id=\"L5RCoreRit000002\">(ritual) Commune with the Spirits</a> (prereq)</td><td>Technique</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-link=\"\" data-uuid=\"Compendium.l5r5e.core-techniques-rituals.Item.L5RCoreRit000022\" data-pack=\"l5r5e.core-techniques-rituals\" data-type=\"Item\" data-id=\"L5RCoreRit000022\">(ritual) Blessing of Fertile Fields</a> (prereq)</td><td>Technique</td></tr></table>","source_reference":{"source":"celestial_realms","page":"140"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/title.svg","effects":[]}
|
||||
{"_id":"L5RCoreTit000047","name":"Moon cultist","permission":{"default":0},"type":"title","data":{"in_curriculum":false,"xp_used":0,"rank":1,"bought_at_rank":0,"ring":"void","xp_cost":"30","description":"<h2>Curriculum</h2><table><tr><td>Scholar Skills</td><td>Skill Group</td></tr><tr><td>Composition</td><td>Skill</td></tr><tr><td>Courtesy</td><td>Skill</td></tr><tr><td>Fitness</td><td>Skill</td></tr><tr><td><a class=\"compendium-link\" data-pack=\"l5r5e.core-techniques-invocations\">(invocation) Rank 1-2 Water Invocations</a></td><td>Tech. Grp.</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-link=\"\" data-uuid=\"Compendium.l5r5e.core-techniques-invocations.Item.L5RCoreInv000052\" data-pack=\"l5r5e.core-techniques-invocations\" data-type=\"Item\" data-id=\"L5RCoreInv000052\">(invocation) Hands of the Tides</a> (prereq)</td><td>Technique</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-link=\"\" data-uuid=\"Compendium.l5r5e.core-techniques-rituals.Item.L5RCoreRit000010\" data-pack=\"l5r5e.core-techniques-rituals\" data-type=\"Item\" data-id=\"L5RCoreRit000010\">(ritual) Whispers to the Moon (Moon Cultist)</a> (prereq)</td><td>Technique</td></tr></table>","source_reference":{"source":"celestial_realms","page":"140"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/title.svg","effects":[]}
|
||||
{"_id":"L5RCoreTit000048","name":"Spirits hunter","permission":{"default":0},"type":"title","data":{"in_curriculum":false,"xp_used":0,"rank":1,"bought_at_rank":0,"ring":"void","xp_cost":"12","description":"<h2>Curriculum</h2><table><tr><td>Martial Skills</td><td>Skill Group</td></tr><tr><td>Social Skills</td><td>Skill Group</td></tr><tr><td>Government</td><td>Skill</td></tr><tr><td>Theology</td><td>Skill</td></tr><tr><td><a class=\"compendium-link\" data-pack=\"l5r5e.core-techniques-rituals\">(ritual) Rank 1 Rituals</a> (prereq)</td><td>Tech. Grp.</td></tr></table>","source_reference":{"source":"deathly_turns","page":"21"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/title.svg","effects":[]}
|
||||
{"_id":"L5RCoreTit000049","name":"Animal Handler","permission":{"default":0},"type":"title","data":{"in_curriculum":false,"xp_used":0,"rank":1,"bought_at_rank":0,"ring":"void","xp_cost":"24","description":"<h2>Curriculum</h2><table><tr><td>Trade Skills</td><td>Skill Group</td></tr><tr><td>Martial Arts [Unarmed]</td><td>Skill</td></tr><tr><td>Medicine</td><td>Skill</td></tr><tr><td>Sentiment</td><td>Skill</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-link=\"\" data-uuid=\"Compendium.l5r5e.core-techniques-shuji.Item.L5RCoreShu000096\" data-pack=\"l5r5e.core-techniques-shuji\" data-type=\"Item\" data-id=\"L5RCoreShu000096\">(shuji) Call to Ride</a> (prereq)</td><td>Technique</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-link=\"\" data-uuid=\"Compendium.l5r5e.core-techniques-shuji.Item.L5RCoreShu000095\" data-pack=\"l5r5e.core-techniques-shuji\" data-type=\"Item\" data-id=\"L5RCoreShu000095\">(shuji) Incite Wrath</a> (prereq)</td><td>Technique</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-link=\"\" data-uuid=\"Compendium.l5r5e.core-techniques-shuji.Item.L5RCoreShu000011\" data-pack=\"l5r5e.core-techniques-shuji\" data-type=\"Item\" data-id=\"L5RCoreShu000011\">(shuji) Touchstone of Courage</a> (prereq)</td><td>Technique</td></tr></table>","source_reference":{"source":"children_of_the_five_winds","page":"134"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/title.svg","effects":[]}
|
||||
{"_id":"L5RCoreTit000050","name":"Doomhunter","permission":{"default":0},"type":"title","data":{"in_curriculum":false,"xp_used":0,"rank":1,"bought_at_rank":0,"ring":"void","xp_cost":"28","description":"<h2>Curriculum</h2><table><tr><td>Martial Skills</td><td>Skill Group</td></tr><tr><td>Skulduggery</td><td>Skill</td></tr><tr><td>Survival</td><td>Skill</td></tr><tr><td>Theology</td><td>Skill</td></tr><tr><td><a class=\"compendium-link\" data-pack=\"l5r5e.core-techniques-rituals\">(ritual) Rank 1-2 Rituals</a> (prereq)</td><td>Tech. Grp.</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-link=\"\" data-uuid=\"Compendium.l5r5e.core-techniques-ninjutsu.Item.L5RCoreNin000002\" data-pack=\"l5r5e.core-techniques-ninjutsu\" data-type=\"Item\" data-id=\"L5RCoreNin000002\">(ninjutsu) Skulk</a> (prereq)</td><td>Technique</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-link=\"\" data-uuid=\"Compendium.l5r5e.core-techniques-kata.Item.L5RCoreKat000006\" data-pack=\"l5r5e.core-techniques-kata\" data-type=\"Item\" data-id=\"L5RCoreKat000006\">(kata) Soul Sunder</a> (prereq)</td><td>Technique</td></tr></table>","source_reference":{"source":"children_of_the_five_winds","page":"134"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/title.svg","effects":[]}
|
||||
{"_id":"L5RCoreTit000051","name":"Imperial Peacekeeper","permission":{"default":0},"type":"title","data":{"in_curriculum":false,"xp_used":0,"rank":1,"bought_at_rank":0,"ring":"void","xp_cost":"18","description":"<h2>Curriculum</h2><table><tr><td>Martial Skills</td><td>Skill Group</td></tr><tr><td>Courtesy</td><td>Skill</td></tr><tr><td>Command</td><td>Skill</td></tr><tr><td>Sentiment</td><td>Skill</td></tr><tr><td><a class=\"compendium-link\" data-pack=\"l5r5e.core-techniques-shuji\">(shuji) Rank 1-2 Earth Shuji</a> (prereq)</td><td>Tech. Grp.</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-link=\"\" data-uuid=\"Compendium.l5r5e.core-techniques-rituals.Item.L5RCoreRit000037\" data-pack=\"l5r5e.core-techniques-rituals\" data-type=\"Item\" data-id=\"L5RCoreRit000037\">(ritual) Cultural Exchange</a> (prereq)</td><td>Technique</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-link=\"\" data-uuid=\"Compendium.l5r5e.core-techniques-shuji.Item.L5RCoreShu000016\" data-pack=\"l5r5e.core-techniques-shuji\" data-type=\"Item\" data-id=\"L5RCoreShu000016\">(shuji) Pillar of Calm</a> (prereq)</td><td>Technique</td></tr></table>","source_reference":{"source":"children_of_the_five_winds","page":"135"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/title.svg","effects":[]}
|
||||
{"_id":"L5RCoreTit000052","name":"Interpreter","permission":{"default":0},"type":"title","data":{"in_curriculum":false,"xp_used":0,"rank":1,"bought_at_rank":0,"ring":"void","xp_cost":"12","description":"<h2>Curriculum</h2><table><tr><td>Social Skills</td><td>Skill Group</td></tr><tr><td>Composition</td><td>Skill</td></tr><tr><td>Culture</td><td>Skill</td></tr><tr><td>Government</td><td>Skill</td></tr><tr><td><a class=\"compendium-link\" data-pack=\"l5r5e.core-techniques-shuji\">(shuji) Rank 1 Shuji</a> (prereq)</td><td>Tech. Grp.</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-link=\"\" data-uuid=\"Compendium.l5r5e.core-techniques-rituals.Item.L5RCoreRit000037\" data-pack=\"l5r5e.core-techniques-rituals\" data-type=\"Item\" data-id=\"L5RCoreRit000037\">(ritual) Cultural Exchange</a> (prereq)</td><td>Technique</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-link=\"\" data-uuid=\"Compendium.l5r5e.core-techniques-rituals.Item.L5RCoreRit000041\" data-pack=\"l5r5e.core-techniques-rituals\" data-type=\"Item\" data-id=\"L5RCoreRit000041\">(ritual) Traveler's Experience</a> (prereq)</td><td>Technique</td></tr></table>","source_reference":{"source":"children_of_the_five_winds","page":"135"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/title.svg","effects":[]}
|
||||
{"_id":"L5RCoreTit000053","name":"Scarlet Banners Ranger","permission":{"default":0},"type":"title","data":{"in_curriculum":false,"xp_used":0,"rank":1,"bought_at_rank":0,"ring":"void","xp_cost":"24","description":"<h2>Curriculum</h2><table><tr><td>Martial Skills</td><td>Skill Group</td></tr><tr><td>Trade Skills</td><td>Skill Group</td></tr><tr><td>Government</td><td>Skill</td></tr><tr><td>Sentiment</td><td>Skill</td></tr><tr><td><a class=\"compendium-link\" data-pack=\"l5r5e.core-techniques-kata\">(kata) Rank 1-2 Kata</a> (prereq)</td><td>Tech. Grp.</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-link=\"\" data-uuid=\"Compendium.l5r5e.core-techniques-shuji.Item.L5RCoreShu000089\" data-pack=\"l5r5e.core-techniques-shuji\" data-type=\"Item\" data-id=\"L5RCoreShu000089\">(shuji) Cunning Omission</a> (prereq)</td><td>Technique</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-link=\"\" data-uuid=\"Compendium.l5r5e.core-techniques-kata.Item.L5RCoreKat000090\" data-pack=\"l5r5e.core-techniques-kata\" data-type=\"Item\" data-id=\"L5RCoreKat000090\">(kata) Thunderbolt Style</a> (prereq)</td><td>Technique</td></tr></table>","source_reference":{"source":"children_of_the_five_winds","page":"136"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/title.svg","effects":[]}
|
||||
{"_id":"L5RCoreTit000054","name":"Student of Names","permission":{"default":0},"type":"title","data":{"in_curriculum":false,"xp_used":0,"rank":1,"bought_at_rank":0,"ring":"void","xp_cost":"12","description":"<h2>Curriculum</h2><table><tr><td>Command</td><td>Skill</td></tr><tr><td>Culture</td><td>Skill</td></tr><tr><td>Survival</td><td>Skill</td></tr><tr><td>Theology</td><td>Skill</td></tr><tr><td><a class=\"compendium-link\" data-pack=\"l5r5e.core-techniques-invocations\">(invocation) Rank 1-2 Invocations</a> (prereq)</td><td>Tech. Grp.</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-link=\"\" data-uuid=\"Compendium.l5r5e.core-techniques-rituals.Item.L5RCoreRit000040\" data-pack=\"l5r5e.core-techniques-rituals\" data-type=\"Item\" data-id=\"L5RCoreRit000040\">(ritual) Spiritual Survey</a> (prereq)</td><td>Technique</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-link=\"\" data-uuid=\"Compendium.l5r5e.core-techniques-rituals.Item.L5RCoreRit000005\" data-pack=\"l5r5e.core-techniques-rituals\" data-type=\"Item\" data-id=\"L5RCoreRit000005\">(ritual) Threshold Barrier</a> (prereq)</td><td>Technique</td></tr></table>","source_reference":{"source":"children_of_the_five_winds","page":"136"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/title.svg","effects":[]}
|
||||
{"_id":"L5RCoreTit000055","name":"White Guard Veteran","permission":{"default":0},"type":"title","data":{"in_curriculum":false,"xp_used":0,"rank":1,"bought_at_rank":0,"ring":"void","xp_cost":"32","description":"<h2>Curriculum</h2><table><tr><td>Martial Skills</td><td>Skill Group</td></tr><tr><td>Courtesy</td><td>Skill</td></tr><tr><td>Command</td><td>Skill</td></tr><tr><td>Survival</td><td>Skill</td></tr><tr><td>Theology</td><td>Skill</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-link=\"\" data-uuid=\"Compendium.l5r5e.core-techniques-shuji.Item.L5RCoreShu000038\" data-pack=\"l5r5e.core-techniques-shuji\" data-type=\"Item\" data-id=\"L5RCoreShu000038\">(shuji) A Samurai’s Fate</a> (prereq)</td><td>Technique</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-link=\"\" data-uuid=\"Compendium.l5r5e.core-techniques-kata.Item.L5RCoreKat000083\" data-pack=\"l5r5e.core-techniques-kata\" data-type=\"Item\" data-id=\"L5RCoreKat000083\">(kata) Stalking Leopard Style</a> (prereq)</td><td>Technique</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-link=\"\" data-uuid=\"Compendium.l5r5e.core-techniques-kata.Item.L5RCoreKat000084\" data-pack=\"l5r5e.core-techniques-kata\" data-type=\"Item\" data-id=\"L5RCoreKat000084\">(kata) Sudden Downpour Style</a> (prereq)</td><td>Technique</td></tr></table>","source_reference":{"source":"children_of_the_five_winds","page":"137"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/title.svg","effects":[]}
|
||||
|
||||
@@ -104,3 +104,13 @@
|
||||
{"_id":"L5RCoreWea000104","name":"Mizutsumi [Blessed Treasure]","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"10","zeni":"0","properties":[{"id":"L5RCorePro000002","name":"Ceremonial"},{"id":"L5RCorePro000001","name":"Razor-Edged"},{"id":"L5RCorePro000014","name":"Sacred"}],"category":"Swords","skill":"melee","readied":false,"range":"1","damage":"4","deadliness":"5","grip_1":"","grip_2":"Deadliness +2","description":"","source_reference":{"source":"deathly_turns","page":"19"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/katana.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000105","name":"The Five Akodo Daggers [Blessed Treasure]","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"10","zeni":"0","properties":[{"id":"L5RCorePro000005","name":"Concealable"},{"id":"L5RCorePro000015","name":"Durable"},{"id":"L5RCorePro000001","name":"Razor-Edged"},{"id":"L5RCorePro000014","name":"Sacred"}],"category":"Hand Weapons","skill":"melee","readied":false,"range":"","damage":"2","deadliness":"6","grip_1":"","grip_2":"Deadliness +2","description":"","source_reference":{"source":"fields_of_victory","page":"92"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/knife.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000106","name":"The blade with no name: Ancestral sword of the Dragon [Blessed Treasure]","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"10","zeni":"0","properties":[{"id":"L5RCorePro000014","name":"Sacred"}],"category":"Swords","skill":"melee","readied":false,"range":"","damage":"","deadliness":"","grip_1":"","grip_2":"","description":"","source_reference":{"source":"celestial_realms","page":"100"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/katana.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000107","name":"Catalpa Bow","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"7","zeni":"25 koku","properties":[{"id":"L5RCorePro000002","name":"Ceremonial"},{"id":"L5RCorePro000014","name":"Sacred"}],"category":"Bows","skill":"ranged","readied":false,"range":"2-5","damage":"5","deadliness":"3","grip_1":"N/A","grip_2":"","description":"","source_reference":{"source":"children_of_the_five_winds","page":"99"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/bow.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000108","name":"Charging Lance","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"6","zeni":"7 koku","properties":[{"id":"L5RCorePro000006","name":"Cumbersome"},{"id":"L5RCorePro000011","name":"Wargear"}],"category":"Polearms","skill":"melee","readied":false,"range":"1-2","damage":"4","deadliness":"3","grip_1":"N/A","grip_2":"-, (after a Move action on horseback): Damage +3, Deadliness 7, gain the Hewing item quality","description":"","source_reference":{"source":"children_of_the_five_winds","page":"99"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/bo.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000109","name":"Fire Lance","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"9","zeni":"40 koku","properties":[{"id":"L5RCorePro000006","name":"Cumbersome"},{"id":"L5RCorePro000013","name":"Prepare"},{"id":"L5RCorePro000011","name":"Wargear"}],"category":"Polearms","skill":"melee","readied":false,"range":"1-2","damage":"4","deadliness":"3","grip_1":"N/A","grip_2":"-, (firework launch): Martial Arts[Ranged] Range 3-5 Damage +3 Deadliness 9","description":"","source_reference":{"source":"children_of_the_five_winds","page":"99"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/bo.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000110","name":"Ganzu Ring Ax","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"9","zeni":"35 koku","properties":[{"id":"L5RCorePro000006","name":"Cumbersome"},{"id":"L5RCorePro000038","name":"Hewing"},{"id":"L5RCorePro000011","name":"Wargear"}],"category":"Axes","skill":"melee","readied":false,"range":"1-2","damage":"4","deadliness":"7","grip_1":"N/A","grip_2":"","description":"","source_reference":{"source":"children_of_the_five_winds","page":"99"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/axe.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000111","name":"Katar (Punch Dagger)","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"9","zeni":"10 koku","properties":[{"id":"L5RCorePro000038","name":"Hewing"},{"id":"L5RCorePro000001","name":"Razor-Edged"}],"category":"Hand Weapons","skill":"melee","readied":false,"range":"0-1","damage":"3","deadliness":"5","grip_1":"","grip_2":"N/A","description":"","source_reference":{"source":"children_of_the_five_winds","page":"99"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/bo.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000112","name":"Repeating Crossbow","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"8","zeni":"50 koku","properties":[{"id":"L5RCorePro000006","name":"Cumbersome"}],"category":"Crossbows","skill":"ranged","readied":false,"range":"2-4","damage":"5","deadliness":"3","grip_1":"N/A","grip_2":"","description":"","source_reference":{"source":"children_of_the_five_winds","page":"101"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/crossbow.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000113","name":"Saddle Cutter","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"8","zeni":"15 koku","properties":[{"id":"L5RCorePro000006","name":"Cumbersome"},{"id":"L5RCorePro000011","name":"Wargear"}],"category":"Polearms","skill":"melee","readied":false,"range":"0-1","damage":"4","deadliness":"6","grip_1":"","grip_2":"","description":"","source_reference":{"source":"children_of_the_five_winds","page":"101"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/knife.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000114","name":"Ide Parasol Shield","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"9","zeni":"8 koku","properties":[{"id":"L5RCorePro000005","name":"Concealable"},{"id":"L5RCorePro000006","name":"Cumbersome"}],"category":"Shields","skill":"melee","readied":false,"range":"","damage":"2","deadliness":"3","grip_1":"","grip_2":"","description":"","source_reference":{"source":"children_of_the_five_winds","page":"101"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/unarmed.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000115","name":"Standing Shield","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"8","zeni":"12 koku","properties":[{"id":"L5RCorePro000006","name":"Cumbersome"},{"id":"L5RCorePro000015","name":"Durable"}],"category":"Shields","skill":"melee","readied":false,"range":"","damage":"2","deadliness":"2","grip_1":"","grip_2":"","description":"","source_reference":{"source":"children_of_the_five_winds","page":"101"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/unarmed.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000116","name":"The Ancestral Sword of the Fox [Blessed Treasure]","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"10","zeni":"0","properties":[{"id":"L5RCorePro000002","name":"Ceremonial"},{"id":"L5RCorePro000006","name":"Cumbersome"},{"id":"L5RCorePro000015","name":"Durable"},{"id":"L5RCorePro000001","name":"Razor-Edged"},{"id":"L5RCorePro000014","name":"Sacred"}],"category":"Swords","skill":"melee","readied":false,"range":"1","damage":"5","deadliness":"7","grip_1":"","grip_2":"Deadliness 8","description":"","source_reference":{"source":"children_of_the_five_winds","page":"105"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/katana.svg","effects":[]}
|
||||
|
||||
@@ -117,7 +117,6 @@ export class ActorL5r5e extends Actor {
|
||||
});
|
||||
}
|
||||
|
||||
// Now using updateDocuments
|
||||
return Actor.updateDocuments([docData], context).then(() => {
|
||||
// Notify the "Gm Monitor" if this actor is watched
|
||||
if (game.settings.get(CONFIG.l5r5e.namespace, "gm-monitor-actors").some((uuid) => uuid === this.uuid)) {
|
||||
@@ -126,6 +125,22 @@ export class ActorL5r5e extends Actor {
|
||||
});
|
||||
}
|
||||
|
||||
/** @inheritDoc */
|
||||
async _preUpdate(changes, options, user) {
|
||||
if (this.isCharacterType) {
|
||||
// apply compromised condition if strife goes beyond max
|
||||
const strife = changes.system?.strife?.value ?? this.system.strife.value;
|
||||
const isCompromised = strife > this.system.composure;
|
||||
// apply incapacitated if fatigue goes beyond max endurance
|
||||
const fatigue = changes.system?.fatigue?.value ?? this.system.fatigue.value;
|
||||
const isIncapacitated = fatigue > this.system.endurance;
|
||||
await Promise.all([
|
||||
this.toggleStatusEffect('compromised', {active: isCompromised}),
|
||||
this.toggleStatusEffect('incapacitated', {active: isIncapacitated}),
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
/** @override */
|
||||
prepareData() {
|
||||
super.prepareData();
|
||||
@@ -138,13 +153,16 @@ export class ActorL5r5e extends Actor {
|
||||
ActorL5r5e.computeDerivedAttributes(system);
|
||||
}
|
||||
|
||||
const isAfflicted = this.statuses.has("afflicted");
|
||||
const isCompromised = this.statuses.has("compromised");
|
||||
|
||||
// Attributes bars
|
||||
system.fatigue.max = system.endurance;
|
||||
system.strife.max = system.composure;
|
||||
system.void_points.max = system.rings.void;
|
||||
|
||||
// if compromise, vigilance = 1
|
||||
system.is_compromised = system.strife.value > system.strife.max;
|
||||
// if compromised or afflicted, vigilance = 1
|
||||
system.is_afflicted_or_compromised = isAfflicted || isCompromised;
|
||||
|
||||
// Make sure void points are never greater than max
|
||||
if (system.void_points.value > system.void_points.max) {
|
||||
@@ -189,6 +207,21 @@ export class ActorL5r5e extends Actor {
|
||||
return this._updateActorFromAdvancement(item, false);
|
||||
}
|
||||
|
||||
/**
|
||||
* @type {import("./types").Condition}
|
||||
*
|
||||
* Remove conditions by known string ids
|
||||
* @param conditions {Set<Condition>}
|
||||
* @returns {Promise<void>}
|
||||
*/
|
||||
async removeConditions(conditions) {
|
||||
const effectsToRemove = this.statuses.intersection(conditions);
|
||||
const idsToRemove = this.effects.contents
|
||||
.filter(effect => effect.statuses.isSubsetOf(effectsToRemove))
|
||||
.map(effect => effect.id);
|
||||
await this.deleteEmbeddedDocuments("ActiveEffect", idsToRemove);
|
||||
}
|
||||
|
||||
/**
|
||||
* Alter Actor skill/ring from a advancement
|
||||
* @param {Item} item
|
||||
@@ -238,7 +271,7 @@ export class ActorL5r5e extends Actor {
|
||||
*/
|
||||
async renderTextTemplate() {
|
||||
const sheetData = (await this.sheet?.getData()) || this;
|
||||
const tpl = await renderTemplate(`${CONFIG.l5r5e.paths.templates}actors/actor-text.html`, sheetData);
|
||||
const tpl = await foundry.applications.handlebars.renderTemplate(`${CONFIG.l5r5e.paths.templates}actors/actor-text.html`, sheetData);
|
||||
if (!tpl) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -55,15 +55,15 @@ export class ArmySheetL5r5e extends BaseSheetL5r5e {
|
||||
*/
|
||||
_createDragDropHandlers() {
|
||||
return [
|
||||
new DragDrop({
|
||||
new foundry.applications.ux.DragDrop.implementation({
|
||||
dropSelector: ".warlord",
|
||||
callbacks: { drop: this._onDropActors.bind(this, "warlord") },
|
||||
}),
|
||||
new DragDrop({
|
||||
new foundry.applications.ux.DragDrop.implementation({
|
||||
dropSelector: ".commander",
|
||||
callbacks: { drop: this._onDropActors.bind(this, "commander") },
|
||||
}),
|
||||
new DragDrop({
|
||||
new foundry.applications.ux.DragDrop.implementation({
|
||||
dropSelector: null,
|
||||
callbacks: { drop: this._onDrop.bind(this) },
|
||||
}),
|
||||
@@ -120,7 +120,7 @@ export class ArmySheetL5r5e extends BaseSheetL5r5e {
|
||||
|
||||
// Editors enrichment
|
||||
for (const name of ["army_abilities", "supplies_logistics", "past_battles"]) {
|
||||
sheetData.data.enrichedHtml[name] = await TextEditor.enrichHTML(sheetData.data.system[name], {
|
||||
sheetData.data.enrichedHtml[name] = await foundry.applications.ux.TextEditor.implementation.enrichHTML(sheetData.data.system[name], {
|
||||
async: true,
|
||||
});
|
||||
}
|
||||
|
||||
@@ -321,6 +321,73 @@ export class BaseCharacterSheetL5r5e extends BaseSheetL5r5e {
|
||||
|
||||
// Fatigue/Strife +/-
|
||||
html.find(".addsub-control").on("click", this._modifyFatigueOrStrife.bind(this));
|
||||
|
||||
// Effect remove/display
|
||||
html.find(".effect-delete").on("click", this._removeEffectId.bind(this));
|
||||
html.find(".effect-name").on("click", this._openEffectJournal.bind(this));
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove an effect
|
||||
* @param {Event} event
|
||||
* @private
|
||||
*/
|
||||
_removeEffectId(event) {
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
|
||||
const effectId = $(event.currentTarget).data("effect-id");
|
||||
if (!effectId) {
|
||||
return;
|
||||
}
|
||||
|
||||
const tmpItem = this.actor.effects.get(effectId);
|
||||
if (!tmpItem) {
|
||||
return;
|
||||
}
|
||||
|
||||
const callback = async () => {
|
||||
return this.actor.deleteEmbeddedDocuments("ActiveEffect", [effectId]);
|
||||
};
|
||||
|
||||
// Holing Ctrl = without confirm
|
||||
if (event.ctrlKey) {
|
||||
return callback();
|
||||
}
|
||||
|
||||
game.l5r5e.HelpersL5r5e.confirmDeleteDialog(
|
||||
game.i18n.format("l5r5e.global.delete_confirm", { name: tmpItem.name }),
|
||||
callback
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Open the core linked journal effect if exist
|
||||
* @param {Event} event
|
||||
* @private
|
||||
*/
|
||||
async _openEffectJournal(event) {
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
|
||||
const effectId = $(event.currentTarget).data("effect-id");
|
||||
if (!effectId) {
|
||||
return;
|
||||
}
|
||||
|
||||
const effect = this.actor.effects.get(effectId);
|
||||
if (!effect?.system?.id && !effect?.system?.uuid) {
|
||||
return;
|
||||
}
|
||||
|
||||
const journal = await game.l5r5e.HelpersL5r5e.getObjectGameOrPack({
|
||||
id: effect.system.id,
|
||||
uuid: effect.system.uuid,
|
||||
type: "JournalEntry",
|
||||
});
|
||||
if (journal) {
|
||||
journal.sheet.render(true);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/**
|
||||
* Base Sheet for Actor and Npc
|
||||
*/
|
||||
export class BaseSheetL5r5e extends ActorSheet {
|
||||
export class BaseSheetL5r5e extends foundry.appv1.sheets.ActorSheet {
|
||||
/**
|
||||
* Commons options
|
||||
*/
|
||||
@@ -81,8 +81,8 @@ export class BaseSheetL5r5e extends ActorSheet {
|
||||
|
||||
// Editors enrichment
|
||||
sheetData.data.enrichedHtml = {
|
||||
description: await TextEditor.enrichHTML(sheetData.data.system.description, { async: true }),
|
||||
notes: await TextEditor.enrichHTML(sheetData.data.system.notes, { async: true }),
|
||||
description: await foundry.applications.ux.TextEditor.implementation.enrichHTML(sheetData.data.system.description, { async: true }),
|
||||
notes: await foundry.applications.ux.TextEditor.implementation.enrichHTML(sheetData.data.system.notes, { async: true }),
|
||||
};
|
||||
|
||||
// Shortcut for some tests
|
||||
|
||||
@@ -101,19 +101,19 @@ export class TwentyQuestionsDialog extends FormApplication {
|
||||
*/
|
||||
_createDragDropHandlers() {
|
||||
return [
|
||||
new DragDrop({
|
||||
new foundry.applications.ux.DragDrop.implementation({
|
||||
dragSelector: ".item",
|
||||
dropSelector: ".items",
|
||||
permissions: { dragstart: this.isEditable, drop: this.isEditable },
|
||||
callbacks: { dragstart: this._onDragStart.bind(this), drop: this._onDropItem.bind(this, "item") },
|
||||
}),
|
||||
new DragDrop({
|
||||
new foundry.applications.ux.DragDrop.implementation({
|
||||
dragSelector: ".technique",
|
||||
dropSelector: ".techniques",
|
||||
permissions: { dragstart: this.isEditable, drop: this.isEditable },
|
||||
callbacks: { dragstart: this._onDragStart.bind(this), drop: this._onDropItem.bind(this, "technique") },
|
||||
}),
|
||||
new DragDrop({
|
||||
new foundry.applications.ux.DragDrop.implementation({
|
||||
dragSelector: ".peculiarity",
|
||||
dropSelector: ".peculiarities",
|
||||
permissions: { dragstart: this.isEditable, drop: this.isEditable },
|
||||
@@ -122,7 +122,7 @@ export class TwentyQuestionsDialog extends FormApplication {
|
||||
drop: this._onDropItem.bind(this, "peculiarity"),
|
||||
},
|
||||
}),
|
||||
new DragDrop({
|
||||
new foundry.applications.ux.DragDrop.implementation({
|
||||
dragSelector: ".bond",
|
||||
dropSelector: ".bonds",
|
||||
permissions: { dragstart: this.isEditable, drop: this.isEditable },
|
||||
@@ -288,14 +288,12 @@ export class TwentyQuestionsDialog extends FormApplication {
|
||||
// School Ability
|
||||
if (stepKey === "step3.school_ability") {
|
||||
if (item.system.technique_type !== "school_ability") {
|
||||
console.warn(
|
||||
`L5R5E | 20Q | This technique is not a school ability : ${item.system.technique_type}`
|
||||
);
|
||||
console.warn(`L5R5E | 20Q | This technique is not a school ability : ${item.system.technique_type}`);
|
||||
return;
|
||||
} else if (!this.object.data.step3.allowed_techniques?.[item.system.technique_type]) {
|
||||
// Informative message : Tech not allowed
|
||||
ui.notifications.info("l5r5e.techniques.not_allowed", {localize: true});
|
||||
}
|
||||
} else if (!this.object.data.step3.allowed_techniques?.[item.system.technique_type]) {
|
||||
// Informative message : Tech not allowed
|
||||
ui.notifications.info("l5r5e.techniques.not_allowed", {localize: true});
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
@@ -62,7 +62,7 @@ export class CombatL5r5e extends Combat {
|
||||
// If the character was unprepared (such as when surprised), their base initiative value is their vigilance attribute.
|
||||
// Minion NPCs can generate initiative value without a check, using their focus or vigilance attribute
|
||||
let initiative =
|
||||
isPrepared === "true" ? actorSystem.focus : actorSystem.is_compromised ? 1 : actorSystem.vigilance;
|
||||
isPrepared === "true" ? actorSystem.focus : actorSystem.is_afflicted_or_compromised ? 1 : actorSystem.vigilance;
|
||||
|
||||
// Roll only for PC and Adversary
|
||||
if (isPc || combatant.actor.isAdversary) {
|
||||
|
||||
@@ -14,6 +14,173 @@ export const L5R5E = {
|
||||
skillCostMultiplier: 2,
|
||||
techniqueCost: 3,
|
||||
},
|
||||
// For rings wound to be aligned, add them first
|
||||
conditions: [{
|
||||
id: "lightly_wounded_fire",
|
||||
name: "l5r5e.conditions.lightly_wounded_fire",
|
||||
img: "systems/l5r5e/assets/icons/conditions/fire-white.webp",
|
||||
system: { id: "L5RCoreCon000016" }
|
||||
},{
|
||||
id: "lightly_wounded_water",
|
||||
name: "l5r5e.conditions.lightly_wounded_water",
|
||||
img: "systems/l5r5e/assets/icons/conditions/water-white.webp",
|
||||
system: { id: "L5RCoreCon000016" }
|
||||
},{
|
||||
id: "lightly_wounded_air",
|
||||
name: "l5r5e.conditions.lightly_wounded_air",
|
||||
img: "systems/l5r5e/assets/icons/conditions/air-white.webp",
|
||||
system: { id: "L5RCoreCon000016" }
|
||||
},{
|
||||
id: "lightly_wounded_earth",
|
||||
name: "l5r5e.conditions.lightly_wounded_earth",
|
||||
img: "systems/l5r5e/assets/icons/conditions/earth-white.webp",
|
||||
system: { id: "L5RCoreCon000016" }
|
||||
},{
|
||||
id: "lightly_wounded_void",
|
||||
name: "l5r5e.conditions.lightly_wounded_void",
|
||||
img: "systems/l5r5e/assets/icons/conditions/void-white.webp",
|
||||
system: { id: "L5RCoreCon000016" }
|
||||
},{
|
||||
id: "severely_wounded_fire",
|
||||
name: "l5r5e.conditions.severely_wounded_fire",
|
||||
img: "systems/l5r5e/assets/icons/conditions/fire-black.webp",
|
||||
system: { id: "L5RCoreCon000016" }
|
||||
},{
|
||||
id: "severely_wounded_water",
|
||||
name: "l5r5e.conditions.severely_wounded_water",
|
||||
img: "systems/l5r5e/assets/icons/conditions/water-black.webp",
|
||||
system: { id: "L5RCoreCon000016" }
|
||||
},{
|
||||
id: "severely_wounded_air",
|
||||
name: "l5r5e.conditions.severely_wounded_air",
|
||||
img: "systems/l5r5e/assets/icons/conditions/air-black.webp",
|
||||
system: { id: "L5RCoreCon000016" }
|
||||
},{
|
||||
id: "severely_wounded_earth",
|
||||
name: "l5r5e.conditions.severely_wounded_earth",
|
||||
img: "systems/l5r5e/assets/icons/conditions/earth-black.webp",
|
||||
system: { id: "L5RCoreCon000016" }
|
||||
},{
|
||||
id: "severely_wounded_void",
|
||||
name: "l5r5e.conditions.severely_wounded_void",
|
||||
img: "systems/l5r5e/assets/icons/conditions/void-black.webp",
|
||||
system: { id: "L5RCoreCon000016" }
|
||||
},{
|
||||
id: "afflicted",
|
||||
name: "l5r5e.conditions.afflicted",
|
||||
img: "icons/magic/death/undead-ghost-scream-teal.webp",
|
||||
system: { id: "L5RCoreCon000001" }
|
||||
},{
|
||||
id: "bleeding",
|
||||
name: "l5r5e.conditions.bleeding",
|
||||
img: "icons/skills/wounds/blood-drip-droplet-red.webp",
|
||||
system: { id: "L5RCoreCon000002" }
|
||||
},{
|
||||
id: "burning",
|
||||
name: "l5r5e.conditions.burning",
|
||||
img: "icons/magic/fire/flame-burning-creature-skeleton.webp",
|
||||
system: { id: "L5RCoreCon000003" }
|
||||
},{
|
||||
id: "centered",
|
||||
name: "l5r5e.conditions.centered",
|
||||
img: "systems/l5r5e/assets/icons/social.svg",
|
||||
system: { id: "L5RCoreCon000022" }
|
||||
},{
|
||||
id: "compromised",
|
||||
name: "l5r5e.conditions.compromised",
|
||||
img: "icons/creatures/abilities/mouth-teeth-human.webp",
|
||||
system: { id: "L5RCoreCon000004" }
|
||||
},{
|
||||
id: "dazed",
|
||||
name: "l5r5e.conditions.dazed",
|
||||
img: "icons/magic/light/beam-explosion-orange.webp",
|
||||
system: { id: "L5RCoreCon000005" }
|
||||
},{
|
||||
id: "disoriented",
|
||||
name: "l5r5e.conditions.disoriented",
|
||||
img: "icons/magic/control/hypnosis-mesmerism-eye.webp",
|
||||
system: { id: "L5RCoreCon000006" }
|
||||
},{
|
||||
id: "dying",
|
||||
name: "l5r5e.conditions.dying",
|
||||
img: "icons/magic/death/skull-humanoid-white-blue.webp",
|
||||
system: { id: "L5RCoreCon000007" }
|
||||
},{
|
||||
id: "emboldened",
|
||||
name: "l5r5e.conditions.emboldened",
|
||||
img: "systems/l5r5e/assets/icons/social.svg",
|
||||
system: { id: "L5RCoreCon000023" }
|
||||
},{
|
||||
id: "enraged",
|
||||
name: "l5r5e.conditions.enraged",
|
||||
img: "icons/skills/wounds/injury-face-impact-orange.webp",
|
||||
system: { id: "L5RCoreCon000008" }
|
||||
},{
|
||||
id: "exhausted",
|
||||
name: "l5r5e.conditions.exhausted",
|
||||
img: "icons/magic/life/heart-glowing-red.webp",
|
||||
system: { id: "L5RCoreCon000009" }
|
||||
},{
|
||||
id: "illness_coughing_illness",
|
||||
name: "l5r5e.conditions.illness_coughing_illness",
|
||||
img: "icons/svg/poison.svg",
|
||||
system: { id: "L5RCoreCon000019" }
|
||||
},{
|
||||
id: "illness_fire_rash",
|
||||
name: "l5r5e.conditions.illness_fire_rash",
|
||||
img: "icons/svg/fire.svg",
|
||||
system: { id: "L5RCoreCon000021" }
|
||||
},{
|
||||
id: "illness_gut_sickness",
|
||||
name: "l5r5e.conditions.illness_gut_sickness",
|
||||
img: "icons/svg/poison.svg",
|
||||
system: { id: "L5RCoreCon000018" }
|
||||
},{
|
||||
id: "illness_oozing_sore_disease",
|
||||
name: "l5r5e.conditions.illness_oozing_sore_disease",
|
||||
img: "icons/svg/eye.svg",
|
||||
system: { id: "L5RCoreCon000017" }
|
||||
},{
|
||||
id: "illness_unsteady_illness",
|
||||
name: "l5r5e.conditions.illness_unsteady_illness",
|
||||
img: "icons/svg/daze.svg",
|
||||
system: { id: "L5RCoreCon000020" }
|
||||
},{
|
||||
id: "immobilized",
|
||||
name: "l5r5e.conditions.immobilized",
|
||||
img: "icons/magic/nature/root-vine-entangle-foot-green.webp",
|
||||
system: { id: "L5RCoreCon000010" }
|
||||
},{
|
||||
id: "incapacitated",
|
||||
name: "l5r5e.conditions.incapacitated",
|
||||
img: "icons/magic/control/silhouette-hold-change-green.webp",
|
||||
system: { id: "L5RCoreCon000011" }
|
||||
},{
|
||||
id: "intoxicated",
|
||||
name: "l5r5e.conditions.intoxicated",
|
||||
img: "icons/consumables/drinks/alcohol-jar-spirits-gray.webp",
|
||||
system: { id: "L5RCoreCon000012" }
|
||||
},{
|
||||
id: "possessed",
|
||||
name: "l5r5e.conditions.possessed",
|
||||
img: "icons/svg/terror.svg",
|
||||
system: { id: "L5RCoreCon000024" }
|
||||
},{
|
||||
id: "prone",
|
||||
name: "l5r5e.conditions.prone",
|
||||
img: "icons/magic/control/silhouette-fall-slip-prone.webp",
|
||||
system: { id: "L5RCoreCon000013" }
|
||||
},{
|
||||
id: "silenced",
|
||||
name: "l5r5e.conditions.silenced",
|
||||
img: "icons/magic/control/mouth-smile-deception-purple.webp",
|
||||
system: { id: "L5RCoreCon000014" }
|
||||
},{
|
||||
id: "unconscious",
|
||||
name: "l5r5e.conditions.unconscious",
|
||||
img: "icons/magic/control/sleep-bubble-purple.webp",
|
||||
system: { id: "L5RCoreCon000015" }
|
||||
}],
|
||||
regex: {
|
||||
techniqueDifficulty: /^@([TS]):([^|]+?)(?:\|(min|max)(?:\(([^)]+?)\))?)?$/,
|
||||
},
|
||||
@@ -65,6 +232,11 @@ export const L5R5E = {
|
||||
label: "l5r5e.source_reference.writ_of_the_wild",
|
||||
type: "l5r5e.multiselect.sources_categories.rules"
|
||||
},
|
||||
"children_of_the_five_winds": {
|
||||
value: "children_of_the_five_winds",
|
||||
label: "l5r5e.source_reference.children_of_the_five_winds",
|
||||
type: "l5r5e.multiselect.sources_categories.rules"
|
||||
},
|
||||
"gm_kit": {
|
||||
value: "gm_kit",
|
||||
label: "l5r5e.source_reference.gm_kit",
|
||||
@@ -266,6 +438,7 @@ L5R5E.families.set("bat", ["Komori"]);
|
||||
L5R5E.families.set("boar", ["Heichi"]);
|
||||
L5R5E.families.set("dragonfly", ["Tonbo"]);
|
||||
L5R5E.families.set("firefly", ["Hotaru"]);
|
||||
L5R5E.families.set("fox", ["Kitsune"]);
|
||||
L5R5E.families.set("hare", ["Ujina", "Usagi"]);
|
||||
L5R5E.families.set("monkey", ["Toku", "Fuzake"]);
|
||||
L5R5E.families.set("oriole", ["Tsi"]);
|
||||
@@ -299,6 +472,7 @@ L5R5E.demeanors = [
|
||||
{ id: "capricious", mod: { air: 2, earth: -2 } },
|
||||
{ id: "cautious", mod: { air: 2, earth: -2 } },
|
||||
{ id: "clever", mod: { air: 2, earth: -2 } },
|
||||
{ id: "compassionate", mod: { fire: 2, air: -1, water: -1}},
|
||||
{ id: "confused", mod: { fire: 1, void: 1, air: -2 } },
|
||||
{ id: "courageous", mod: { air: 2, earth: -2 } },
|
||||
{ id: "cowardly", mod: { earth: 2, fire: -2 } },
|
||||
|
||||
@@ -193,7 +193,7 @@ export class RollnKeepDialog extends FormApplication {
|
||||
*/
|
||||
_createDragDropHandlers() {
|
||||
return [
|
||||
new DragDrop({
|
||||
new foundry.applications.ux.DragDrop.implementation({
|
||||
dragSelector: ".dice.draggable",
|
||||
dropSelector: ".dropbox",
|
||||
permissions: { dragstart: this.isEditable, drop: this.isEditable },
|
||||
@@ -259,13 +259,13 @@ export class RollnKeepDialog extends FormApplication {
|
||||
// GM Only, need to be before the editable check
|
||||
if (game.user.isGM && this.object.currentStep > 0) {
|
||||
// Add Context menu to rollback choices
|
||||
new ContextMenu(html, ".l5r5e.profil", [
|
||||
new foundry.applications.ux.ContextMenu.implementation(html[0], ".l5r5e.profil", [
|
||||
{
|
||||
name: game.i18n.localize("l5r5e.dice.roll_n_keep.undo"),
|
||||
icon: '<i class="fas fa-undo"></i>',
|
||||
callback: () => this._undoLastStepChoices(),
|
||||
},
|
||||
]);
|
||||
], { jQuery: false });
|
||||
}
|
||||
|
||||
// *** Everything below here is only needed if the sheet is editable ***
|
||||
@@ -792,7 +792,7 @@ export class RollnKeepDialog extends FormApplication {
|
||||
const messageId = card.parents(".chat-message").data("message-id");
|
||||
|
||||
// Already open ? close it
|
||||
const app = Object.values(ui.windows).find((e) => e.id === `l5r5e-roll-n-keep-dialog-${messageId}`);
|
||||
const app = game.l5r5e.HelpersL5r5e.getApplication(`l5r5e-roll-n-keep-dialog-${messageId}`);
|
||||
if (app) {
|
||||
app.close();
|
||||
} else {
|
||||
|
||||
@@ -257,7 +257,7 @@ export class RollL5r5e extends Roll {
|
||||
displaySummary: contexte?.from !== "render",
|
||||
};
|
||||
|
||||
return renderTemplate(CONFIG.l5r5e.paths.templates + this.constructor.TOOLTIP_TEMPLATE, { chatData });
|
||||
return foundry.applications.handlebars.renderTemplate(CONFIG.l5r5e.paths.templates + this.constructor.TOOLTIP_TEMPLATE, { chatData });
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -319,7 +319,7 @@ export class RollL5r5e extends Roll {
|
||||
};
|
||||
|
||||
// Render the roll display template
|
||||
return renderTemplate(chatOptions.template, chatData);
|
||||
return foundry.applications.handlebars.renderTemplate(chatOptions.template, chatData);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,102 +1,271 @@
|
||||
/**
|
||||
* L5R GM Monitor Windows
|
||||
* @extends {FormApplication}
|
||||
*/
|
||||
export class GmMonitor extends FormApplication {
|
||||
/**
|
||||
* Settings
|
||||
*/
|
||||
object = {
|
||||
view: "characters", // characters|armies
|
||||
actors: [],
|
||||
import { L5r5ePopupManager } from '../misc/l5r5e-popup-manager.js';
|
||||
|
||||
const HandlebarsApplicationMixin = foundry.applications.api.HandlebarsApplicationMixin;
|
||||
const ApplicationV2 = foundry.applications.api.ApplicationV2;
|
||||
|
||||
export class GmMonitor extends HandlebarsApplicationMixin(ApplicationV2) {
|
||||
/** @override ApplicationV2 */
|
||||
static get DEFAULT_OPTIONS() {
|
||||
return {
|
||||
id: "l5r5e-gm-monitor",
|
||||
tag: "div",
|
||||
window: {
|
||||
contentClasses: ["l5r5e", "gm-monitor"],
|
||||
title: "l5r5e.gm.monitor.title",
|
||||
minimizable: true,
|
||||
controls: [
|
||||
{
|
||||
label: game.i18n.localize("l5r5e.gm.monitor.add_selected_tokens"),
|
||||
icon: "fas fa-users",
|
||||
action: "add_selected_tokens",
|
||||
},
|
||||
{
|
||||
label: game.i18n.localize("l5r5e.gm.monitor.switch_view"),
|
||||
icon: "fas fa-repeat",
|
||||
action: "change_view_tab"
|
||||
}
|
||||
],
|
||||
resizable: true,
|
||||
editable: true,
|
||||
},
|
||||
position: {
|
||||
width: "600",
|
||||
height: "150"
|
||||
},
|
||||
actions: {
|
||||
add_selected_tokens: GmMonitor.#addSelectedTokens,
|
||||
change_view_tab: GmMonitor.#rotateViewTab,
|
||||
remove_actor: GmMonitor.#removeActor,
|
||||
toggle_prepared: GmMonitor.#togglePrepared,
|
||||
change_stance: {
|
||||
buttons: [0, 2],
|
||||
handler: GmMonitor.#changeStance,
|
||||
},
|
||||
modify_fatigue: {
|
||||
buttons: [0, 1, 2],
|
||||
handler: GmMonitor.#modifyFatigue,
|
||||
},
|
||||
modify_strife: {
|
||||
buttons: [0, 1, 2],
|
||||
handler: GmMonitor.#modifyStrife,
|
||||
},
|
||||
modify_voidPoint: {
|
||||
buttons: [0, 1, 2],
|
||||
handler: GmMonitor.#modifyVoidPoint,
|
||||
},
|
||||
modify_casualties: {
|
||||
buttons: [0, 1, 2],
|
||||
handler: GmMonitor.#modifyCasualties,
|
||||
},
|
||||
modify_panic: {
|
||||
buttons: [0, 1, 2],
|
||||
handler: GmMonitor.#modifyPanic,
|
||||
}
|
||||
},
|
||||
dragDrop: [{ dragSelector: null, dropSelector: null }],
|
||||
}
|
||||
};
|
||||
|
||||
/** @override HandlebarsApplicationMixin */
|
||||
static PARTS = {
|
||||
hidden_tabs: {
|
||||
template: "templates/generic/tab-navigation.hbs"
|
||||
},
|
||||
character: {
|
||||
id: "character",
|
||||
template: "systems/l5r5e/templates/" + "gm/monitor/character-view.html"
|
||||
},
|
||||
army: {
|
||||
if: "army",
|
||||
template: "systems/l5r5e/templates/" + "gm/monitor/army-view.html"
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Assign the default options
|
||||
* @override
|
||||
* @type {Record<string, string>}
|
||||
* @override ApplicationV2
|
||||
*/
|
||||
static get defaultOptions() {
|
||||
return foundry.utils.mergeObject(super.defaultOptions, {
|
||||
id: "l5r5e-gm-monitor",
|
||||
classes: ["l5r5e", "gm-monitor"],
|
||||
template: CONFIG.l5r5e.paths.templates + "gm/gm-monitor.html",
|
||||
title: game.i18n.localize("l5r5e.gm.monitor.title"),
|
||||
width: 800,
|
||||
height: 300,
|
||||
resizable: true,
|
||||
closeOnSubmit: false,
|
||||
submitOnClose: false,
|
||||
submitOnChange: false,
|
||||
dragDrop: [{ dragSelector: null, dropSelector: null }],
|
||||
});
|
||||
tabGroups = {
|
||||
view: "character"
|
||||
};
|
||||
|
||||
/**
|
||||
* Data that is pushed to html
|
||||
*/
|
||||
context = {
|
||||
actors: []
|
||||
}
|
||||
|
||||
/**
|
||||
* Add the Switch View button on top of sheet
|
||||
* @override
|
||||
* hooks we act upon, saved since we need to remove them when this window is not open
|
||||
*/
|
||||
_getHeaderButtons() {
|
||||
let buttons = super._getHeaderButtons();
|
||||
#hooks = [];
|
||||
|
||||
// Switch view Characters/Armies
|
||||
buttons.unshift({
|
||||
label: game.i18n.localize("l5r5e.gm.monitor.switch_view"),
|
||||
class: "switch-view",
|
||||
icon: "fas fa-repeat",
|
||||
onclick: () =>
|
||||
game.l5r5e.HelpersL5r5e.debounce(
|
||||
"SwitchView-" + this.object.id,
|
||||
() => {
|
||||
this.object.view = this.object.view === "armies" ? "characters" : "armies";
|
||||
this.render(false);
|
||||
},
|
||||
500,
|
||||
true
|
||||
)(),
|
||||
});
|
||||
/**
|
||||
* The DragDrop instance which handles interactivity resulting from DragTransfer events.
|
||||
* @type {DragDrop}
|
||||
*/
|
||||
#dragDrop;
|
||||
|
||||
// Add selected tokens
|
||||
buttons.unshift({
|
||||
label: game.i18n.localize("l5r5e.gm.monitor.add_selected_tokens"),
|
||||
class: "add-selected-token",
|
||||
icon: "fas fa-users",
|
||||
onclick: () =>
|
||||
game.l5r5e.HelpersL5r5e.debounce(
|
||||
"AddSelectedToken-" + this.object.id,
|
||||
() => this.#addSelectedTokens(),
|
||||
500,
|
||||
true
|
||||
)(),
|
||||
});
|
||||
constructor() {
|
||||
super();
|
||||
this.#initialize();
|
||||
}
|
||||
|
||||
return buttons;
|
||||
/** @override ApplicationV2 */
|
||||
async _preClose(options) {
|
||||
await super._preClose(options);
|
||||
options.animate = false;
|
||||
|
||||
for (const hook of this.#hooks) {
|
||||
Hooks.off(hook.hook, hook.fn);
|
||||
}
|
||||
}
|
||||
|
||||
/** @override ApplicationV2 */
|
||||
async _onRender(context, options) {
|
||||
await super._onRender(context, options);
|
||||
|
||||
// Todo: Move this to common l5r5e application v2
|
||||
game.l5r5e.HelpersL5r5e.commonListeners($(this.element));
|
||||
|
||||
this.#dragDrop = new foundry.applications.ux.DragDrop.implementation({
|
||||
dragSelector: null,
|
||||
dropSelector: null,
|
||||
callbacks: {
|
||||
drop: this.#onDrop.bind(this)
|
||||
}
|
||||
}).bind(this.element);
|
||||
|
||||
// Tooltips
|
||||
new L5r5ePopupManager(
|
||||
$(this.element).find(".actor-infos-control"),
|
||||
async (event) => {
|
||||
const type = $(event.currentTarget).data("type");
|
||||
if (!type) return;
|
||||
|
||||
if (type === "text") {
|
||||
return $(event.currentTarget).data("text");
|
||||
}
|
||||
|
||||
const uuid = $(event.currentTarget).data("actor-uuid");
|
||||
if (!uuid) return;
|
||||
|
||||
const actor = this.context.actors.find(actor => actor.uuid === uuid);
|
||||
if (!actor) return;
|
||||
|
||||
switch (type) {
|
||||
case "armors":
|
||||
return this.#getTooltipArmors(actor);
|
||||
case "weapons":
|
||||
return this.#getTooltipWeapons(actor);
|
||||
case "global":
|
||||
return actor.isArmy
|
||||
? this.#getTooltipArmiesGlobal(actor)
|
||||
: this.#getTooltipGlobal(actor);
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
/** @override ApplicationV2 */
|
||||
async _prepareContext() {
|
||||
return {
|
||||
tabs: this.getTabs(),
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
* @param {ApplicationOptions} options
|
||||
* @param {string} partId The part being rendered
|
||||
* @param {ApplicationRenderContext} context Shared context provided by _prepareContext
|
||||
* @returns {Promise<ApplicationRenderContext>} Context data for a specific part
|
||||
*
|
||||
* @override HandlebarsApplicationMixin
|
||||
*/
|
||||
constructor(options = {}) {
|
||||
super(options);
|
||||
this._initialize();
|
||||
async _preparePartContext(partId, context) {
|
||||
switch (partId) {
|
||||
case "character":
|
||||
context.characters = this.context.actors.filter((actor) => !actor.isArmy);
|
||||
break;
|
||||
case "army":
|
||||
context.armies = this.context.actors.filter((actor) => actor.isArmy);
|
||||
break;
|
||||
}
|
||||
return context;
|
||||
}
|
||||
|
||||
/**
|
||||
* Refresh data (used from socket)
|
||||
* Prepare an array of form header tabs.
|
||||
* @returns {Record<string, Partial<ApplicationTab>>}
|
||||
*/
|
||||
async refresh() {
|
||||
if (!game.user.isGM) {
|
||||
getTabs() {
|
||||
const tabs = {
|
||||
character: { id: "character", group: "view", icon: "fa-solid fa-tag", label: "REGION.SECTIONS.identity" },
|
||||
army: { id: "army", group: "view", icon: "fa-solid fa-shapes", label: "REGION.SECTIONS.shapes" },
|
||||
}
|
||||
for (const v of Object.values(tabs)) {
|
||||
v.active = this.tabGroups[v.group] === v.id;
|
||||
v.cssClass = v.active ? "active" : "";
|
||||
}
|
||||
return tabs;
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle dropped data on the Actor sheet
|
||||
* @param {DragEvent} event The originating DragEvent
|
||||
*/
|
||||
async #onDrop(event) {
|
||||
|
||||
if (!this.options.window.editable) {
|
||||
return;
|
||||
}
|
||||
this._initialize();
|
||||
this.render(false);
|
||||
|
||||
const json = event.dataTransfer.getData("text/plain");
|
||||
if (!json) {
|
||||
return;
|
||||
}
|
||||
|
||||
const data = JSON.parse(json);
|
||||
if (!data || data.type !== "Actor" || !data.uuid || !!this.context.actors.find((a) => a.uuid === data.uuid)) {
|
||||
return;
|
||||
}
|
||||
|
||||
const actor = fromUuidSync(data.uuid);
|
||||
if (!actor) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Switch view to current character type
|
||||
if (actor.isArmy) {
|
||||
this.changeTab("army", "view");
|
||||
}
|
||||
else {
|
||||
this.changeTab("character", "view");
|
||||
}
|
||||
|
||||
this.context.actors.push(actor);
|
||||
|
||||
return this.saveActorsIds();
|
||||
}
|
||||
|
||||
/** required for updating via our socket implementation game.l5r5e.HelpersL5r5e.refreshLocalAndSocket("l5r5e-gm-monitor")*/
|
||||
async refresh() {
|
||||
this.render();
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize the values
|
||||
* Save the actors ids in setting
|
||||
* @private
|
||||
*/
|
||||
_initialize() {
|
||||
async saveActorsIds() {
|
||||
return game.settings.set(
|
||||
CONFIG.l5r5e.namespace,
|
||||
"gm-monitor-actors",
|
||||
this.context.actors.map((a) => a.uuid)
|
||||
);
|
||||
}
|
||||
|
||||
#initialize() {
|
||||
let actors;
|
||||
const uuidList = game.settings.get(CONFIG.l5r5e.namespace, "gm-monitor-actors");
|
||||
if (uuidList.length > 0) {
|
||||
@@ -109,12 +278,12 @@ export class GmMonitor extends FormApplication {
|
||||
}
|
||||
return doc;
|
||||
})
|
||||
.filter(a => !!a); // skip null
|
||||
.filter(actor => !!actor); // skip null
|
||||
|
||||
} else {
|
||||
// If empty add pc with owner
|
||||
actors = game.actors.filter((actor) => actor.type === "character" && actor.hasPlayerOwnerActive);
|
||||
this._saveActorsIds();
|
||||
this.saveActorsIds();
|
||||
}
|
||||
|
||||
// Sort by name asc
|
||||
@@ -122,287 +291,328 @@ export class GmMonitor extends FormApplication {
|
||||
return a.name.localeCompare(b.name);
|
||||
});
|
||||
|
||||
this.object.actors = actors;
|
||||
this.context.actors = actors;
|
||||
|
||||
this.#hooks.push({
|
||||
hook: "updateActor",
|
||||
fn: Hooks.on("updateActor", (actor) => this.#onUpdateActor(actor))
|
||||
});
|
||||
this.#hooks.push({
|
||||
hook: "updateSetting",
|
||||
fn: Hooks.on("updateSetting", (actor) => this.#onUpdateSetting(actor))
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Switch between the available views in sequence
|
||||
*/
|
||||
static #rotateViewTab() {
|
||||
const tabArray = Object.values(this.getTabs());
|
||||
const activeTabIndex = tabArray.findIndex((tab) => tab.active);
|
||||
const nextTabIndex = activeTabIndex + 1 < tabArray.length ? activeTabIndex + 1 : 0;
|
||||
this.changeTab(tabArray[nextTabIndex].id, tabArray[nextTabIndex].group)
|
||||
}
|
||||
|
||||
/**
|
||||
* Add selected token on monitor if not already present
|
||||
*/
|
||||
#addSelectedTokens() {
|
||||
static #addSelectedTokens() {
|
||||
if (canvas.tokens.controlled.length > 0) {
|
||||
const actors2Add = canvas.tokens.controlled
|
||||
.map(t => t.actor)
|
||||
.filter(t => !!t && !this.object.actors.find((a) => a.uuid === t.uuid));
|
||||
.filter(t => !!t && !this.context.actors.find((a) => a.uuid === t.uuid));
|
||||
|
||||
if (actors2Add.length < 1) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.object.actors = [
|
||||
...this.object.actors,
|
||||
this.context.actors = [
|
||||
...this.context.actors,
|
||||
...actors2Add
|
||||
];
|
||||
this._saveActorsIds().then(() => this.render(false));
|
||||
this.saveActorsIds();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Prevent non GM to render this windows
|
||||
* @override
|
||||
* Update baseValue based on the type of event
|
||||
* @param {Int} baseValue The Base value we can to modify
|
||||
* @param {Int} whichButton The type of click made
|
||||
*/
|
||||
render(force = false, options = {}) {
|
||||
if (!game.user.isGM) {
|
||||
return false;
|
||||
static #newValue(baseValue, whichButton) {
|
||||
switch (whichButton) {
|
||||
case 0: //Left click
|
||||
return Math.max(0, baseValue + 1);
|
||||
case 1: //Middle click
|
||||
return 0;
|
||||
case 2: //Right click
|
||||
return Math.max(0, baseValue - 1);
|
||||
}
|
||||
return super.render(force, options);
|
||||
}
|
||||
|
||||
/**
|
||||
* Construct and return the data object used to render the HTML template for this form application.
|
||||
* @param options
|
||||
* @return {Object}
|
||||
* @override
|
||||
* @param {HTMLElement} target Html target to get actor information from
|
||||
*/
|
||||
async getData(options = null) {
|
||||
return {
|
||||
...(await super.getData(options)),
|
||||
data: {
|
||||
...this.object,
|
||||
actors: this.object.actors.filter((a) => (this.object.view === "armies" ? a.isArmy : !a.isArmy)),
|
||||
},
|
||||
};
|
||||
static async #getActorValidated(target) {
|
||||
const uuid = $(target).data("actor-uuid");
|
||||
if (!uuid) {
|
||||
console.warn("L5R5E | GMM | actor uuid not set", type);
|
||||
return {isValid: false, actor: null};
|
||||
}
|
||||
const actor = await fromUuid(uuid);
|
||||
if (!actor) {
|
||||
console.warn("L5R5E | GMM | Actor not found", type);
|
||||
return {isValid: false, actor: null};
|
||||
}
|
||||
return {isValid:true, actor: actor};
|
||||
}
|
||||
|
||||
/**
|
||||
* Listen to html elements
|
||||
* @param {jQuery} html HTML content of the sheet.
|
||||
* @override
|
||||
* @param {PointerEvent} event The originating click event
|
||||
* @param {HTMLElement} target The capturing HTML element which defined a [data-action]
|
||||
*/
|
||||
activateListeners(html) {
|
||||
super.activateListeners(html);
|
||||
|
||||
if (!game.user.isGM) {
|
||||
static async #modifyCasualties(event, target) {
|
||||
const {isValid, actor} = await GmMonitor.#getActorValidated(target);
|
||||
if (!isValid) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Commons
|
||||
game.l5r5e.HelpersL5r5e.commonListeners(html);
|
||||
const casualties_strength = actor.system.battle_readiness.casualties_strength.value;
|
||||
return actor.update({
|
||||
system: {
|
||||
battle_readiness: {
|
||||
casualties_strength: {
|
||||
value: GmMonitor.#newValue(casualties_strength, event.button),
|
||||
}
|
||||
},
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
// Delete
|
||||
html.find(`.actor-remove-control`).on("click", this._removeActor.bind(this));
|
||||
/**
|
||||
* @param {PointerEvent} event The originating click event
|
||||
* @param {HTMLElement} target The capturing HTML element which defined a [data-action]
|
||||
*/
|
||||
static async #modifyPanic(event, target) {
|
||||
const {isValid, actor} = await GmMonitor.#getActorValidated(target);
|
||||
if (!isValid) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Add/Subtract
|
||||
html.find(`.actor-modify-control`).on("mousedown", this._modifyActor.bind(this));
|
||||
const panic_discipline = actor.system.battle_readiness.panic_discipline.value;
|
||||
return actor.update({
|
||||
system: {
|
||||
battle_readiness: {
|
||||
panic_discipline: {
|
||||
value: GmMonitor.#newValue(panic_discipline, event.button),
|
||||
}
|
||||
},
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
// Tooltips
|
||||
game.l5r5e.HelpersL5r5e.popupManager(html.find(".actor-infos-control"), async (event) => {
|
||||
const type = $(event.currentTarget).data("type");
|
||||
if (!type) {
|
||||
return;
|
||||
}
|
||||
if (type === "text") {
|
||||
return $(event.currentTarget).data("text");
|
||||
}
|
||||
/**
|
||||
* @param {PointerEvent} event The originating click event
|
||||
* @param {HTMLElement} target The capturing HTML element which defined a [data-action]
|
||||
*/
|
||||
static async #togglePrepared(event, target) {
|
||||
const {isValid, actor} = await GmMonitor.#getActorValidated(target);
|
||||
if (!isValid) {
|
||||
return;
|
||||
}
|
||||
|
||||
const uuid = $(event.currentTarget).data("actor-uuid");
|
||||
if (!uuid) {
|
||||
return;
|
||||
}
|
||||
const actor = this.object.actors.find((a) => a.uuid === uuid);
|
||||
if (!actor) {
|
||||
return;
|
||||
}
|
||||
|
||||
switch (type) {
|
||||
case "armors":
|
||||
return this._getTooltipArmors(actor);
|
||||
case "weapons":
|
||||
return this._getTooltipWeapons(actor);
|
||||
case "global":
|
||||
return actor.isArmy ? this._getTooltipArmiesGlobal(actor) : this._getTooltipGlobal(actor);
|
||||
return actor.update({
|
||||
system: {
|
||||
prepared: !actor.system.prepared
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle dropped data on the Actor sheet
|
||||
* @param {DragEvent} event
|
||||
* @param {PointerEvent} event The originating click event
|
||||
* @param {HTMLElement} target The capturing HTML element which defined a [data-action]
|
||||
*/
|
||||
async _onDrop(event) {
|
||||
// *** Everything below here is only needed if the sheet is editable ***
|
||||
if (!this.isEditable) {
|
||||
static async #changeStance(event, target) {
|
||||
const {isValid, actor} = await GmMonitor.#getActorValidated(target);
|
||||
if (!isValid) {
|
||||
return;
|
||||
}
|
||||
|
||||
const json = event.dataTransfer.getData("text/plain");
|
||||
if (!json) {
|
||||
return;
|
||||
}
|
||||
|
||||
const data = JSON.parse(json);
|
||||
if (!data || data.type !== "Actor" || !data.uuid || !!this.object.actors.find((a) => a.uuid === data.uuid)) {
|
||||
return;
|
||||
}
|
||||
|
||||
const actor = fromUuidSync(data.uuid);
|
||||
if (!actor) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Switch view to current character type
|
||||
this.object.view = actor.isArmy ? "armies" : "characters";
|
||||
|
||||
this.object.actors.push(actor);
|
||||
|
||||
return this._saveActorsIds();
|
||||
}
|
||||
|
||||
/**
|
||||
* Save the actors ids in settings
|
||||
* @return {Promise<*>}
|
||||
* @private
|
||||
*/
|
||||
async _saveActorsIds() {
|
||||
return game.settings.set(
|
||||
CONFIG.l5r5e.namespace,
|
||||
"gm-monitor-actors",
|
||||
this.object.actors.map((a) => a.uuid)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the link to a property for the current item
|
||||
* @param {Event} event
|
||||
* @return {Promise<void>}
|
||||
* @private
|
||||
*/
|
||||
async _removeActor(event) {
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
|
||||
const uuid = $(event.currentTarget).data("actor-uuid");
|
||||
if (!uuid) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.object.actors = this.object.actors.filter((a) => a.uuid !== uuid);
|
||||
|
||||
return this._saveActorsIds();
|
||||
}
|
||||
|
||||
/**
|
||||
* Add or subtract fatigue/strife/void/casualties/panic
|
||||
* @param event
|
||||
* @return {Promise<void>}
|
||||
* @private
|
||||
*/
|
||||
async _modifyActor(event) {
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
|
||||
const type = $(event.currentTarget).data("type");
|
||||
if (!type) {
|
||||
console.warn("L5R5E | GMM | type not set", type);
|
||||
return;
|
||||
}
|
||||
const uuid = $(event.currentTarget).data("actor-uuid");
|
||||
if (!uuid) {
|
||||
console.warn("L5R5E | GMM | actor uuid not set", type);
|
||||
return;
|
||||
}
|
||||
const actor = fromUuidSync(uuid);
|
||||
if (!actor) {
|
||||
console.warn("L5R5E | GMM | Actor not found", type);
|
||||
return;
|
||||
}
|
||||
|
||||
// Mouse bt : middle = 0, left +1, right -1
|
||||
const add = event.which === 2 ? -999 : event.which === 1 ? 1 : -1;
|
||||
|
||||
// Stance
|
||||
let stanceIdx = CONFIG.l5r5e.stances.findIndex((s) => s === actor.system.stance) + (event.which === 1 ? 1 : -1);
|
||||
let stanceIdx = CONFIG.l5r5e.stances.findIndex((stance) => stance === actor.system.stance) + (event.button === 0 ? 1 : -1);
|
||||
if (stanceIdx < 0) {
|
||||
stanceIdx = CONFIG.l5r5e.stances.length - 1;
|
||||
} else if (stanceIdx > CONFIG.l5r5e.stances.length - 1) {
|
||||
stanceIdx = 0;
|
||||
}
|
||||
|
||||
const updateData = {};
|
||||
switch (type) {
|
||||
// *** Characters ***
|
||||
case "fatigue":
|
||||
updateData["system.fatigue.value"] = Math.max(0, actor.system.fatigue.value + add);
|
||||
break;
|
||||
|
||||
case "strife":
|
||||
updateData["system.strife.value"] = Math.max(0, actor.system.strife.value + add);
|
||||
break;
|
||||
|
||||
case "void_points":
|
||||
updateData["system.void_points.value"] = Math.min(
|
||||
actor.system.void_points.max,
|
||||
Math.max(0, actor.system.void_points.value + add)
|
||||
);
|
||||
break;
|
||||
|
||||
case "stance":
|
||||
updateData["system.stance"] = CONFIG.l5r5e.stances[stanceIdx];
|
||||
break;
|
||||
|
||||
case "prepared":
|
||||
updateData["system.prepared"] = !actor.system.prepared;
|
||||
break;
|
||||
|
||||
// *** Armies ***
|
||||
case "casualties":
|
||||
updateData["system.battle_readiness.casualties_strength.value"] = Math.max(
|
||||
0,
|
||||
actor.system.battle_readiness.casualties_strength.value + add
|
||||
);
|
||||
break;
|
||||
|
||||
case "panic":
|
||||
updateData["system.battle_readiness.panic_discipline.value"] = Math.max(
|
||||
0,
|
||||
actor.system.battle_readiness.panic_discipline.value + add
|
||||
);
|
||||
break;
|
||||
|
||||
default:
|
||||
console.warn("L5R5E | GMM | Unsupported type", type);
|
||||
break;
|
||||
}
|
||||
if (!foundry.utils.isEmpty(updateData)) {
|
||||
await actor.update(updateData);
|
||||
this.render(false);
|
||||
}
|
||||
return actor.update({
|
||||
system: {
|
||||
stance: CONFIG.l5r5e.stances[stanceIdx]
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {PointerEvent} event The originating click event
|
||||
* @param {HTMLElement} target The capturing HTML element which defined a [data-action]
|
||||
*/
|
||||
static async #modifyFatigue(event, target) {
|
||||
const {isValid, actor} = await GmMonitor.#getActorValidated(target);
|
||||
if (!isValid) {
|
||||
return;
|
||||
}
|
||||
|
||||
const fatigue = actor.system.fatigue.value;
|
||||
return actor.update({
|
||||
system: {
|
||||
fatigue: {
|
||||
value: GmMonitor.#newValue(fatigue, event.button)
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {PointerEvent} event The originating click event
|
||||
* @param {HTMLElement} target The capturing HTML element which defined a [data-action]
|
||||
*/
|
||||
static async #modifyStrife(event, target) {
|
||||
const {isValid, actor} = await GmMonitor.#getActorValidated(target);
|
||||
if (!isValid) {
|
||||
return;
|
||||
}
|
||||
|
||||
const strife = actor.system.strife.value;
|
||||
return actor.update({
|
||||
system: {
|
||||
strife: {
|
||||
value: GmMonitor.#newValue(strife, event.button),
|
||||
},
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {PointerEvent} event The originating click event
|
||||
* @param {HTMLElement} target The capturing HTML element which defined a [data-action]
|
||||
*/
|
||||
static async #modifyVoidPoint(event, target) {
|
||||
const {isValid, actor} = await GmMonitor.#getActorValidated(target);
|
||||
if (!isValid) {
|
||||
return;
|
||||
}
|
||||
|
||||
const void_points = actor.system.void_points.value;
|
||||
const void_points_max = actor.system.void_points.max;
|
||||
return actor.update({
|
||||
system: {
|
||||
void_points: {
|
||||
value: Math.min(
|
||||
void_points_max,
|
||||
GmMonitor.#newValue(void_points, event.button)
|
||||
),
|
||||
},
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {PointerEvent} event The originating click event
|
||||
* @param {HTMLElement} target The capturing HTML element which defined a [data-action]
|
||||
*/
|
||||
static async #removeActor(event, target) {
|
||||
const uuid = $(target).data("actor-uuid");
|
||||
if (!uuid) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.context.actors = this.context.actors.filter((actor) => actor.uuid !== uuid);
|
||||
return this.saveActorsIds();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get armors information for this actor
|
||||
* @param {ActorL5r5e} actor
|
||||
* @return {string}
|
||||
* @private
|
||||
*/
|
||||
async #getTooltipArmors(actor) {
|
||||
// Equipped Armors
|
||||
const armors = actor.items
|
||||
.filter((item) => item.type === "armor" && item.system.equipped)
|
||||
.map(
|
||||
(item) =>
|
||||
item.name +
|
||||
` (<i class="fas fa-tint">${item.system.armor.physical}</i>` +
|
||||
` / <i class="fas fa-bolt">${item.system.armor.supernatural}</i>)`
|
||||
);
|
||||
|
||||
// *** Template ***
|
||||
return foundry.applications.handlebars.renderTemplate(`${CONFIG.l5r5e.paths.templates}gm/monitor/tooltips/armors.html`, {
|
||||
armors,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Get weapons information for this actor
|
||||
* @param {ActorL5r5e} actor
|
||||
* @return {string}
|
||||
* @private
|
||||
*/
|
||||
async #getTooltipWeapons(actor) {
|
||||
const display = (weapon) => {
|
||||
return (
|
||||
weapon.name +
|
||||
` (<i class="fas fa-arrows-alt-h"> ${weapon.system.range}</i>` +
|
||||
` / <i class="fas fa-tint"> ${weapon.system.damage}</i>` +
|
||||
` / <i class="fas fa-skull"> ${weapon.system.deadliness}</i>)`
|
||||
);
|
||||
};
|
||||
|
||||
// Readied Weapons
|
||||
const equippedWeapons = actor.items.filter((item) => item.type === "weapon" && item.system.equipped);
|
||||
|
||||
const readied = equippedWeapons
|
||||
.filter((weapon) => !!weapon.system.readied)
|
||||
.map((weapon) => display(weapon));
|
||||
|
||||
// Equipped Weapons
|
||||
const sheathed = equippedWeapons
|
||||
.filter((weapon) => !weapon.system.readied)
|
||||
.map((weapon) => display(weapon));
|
||||
|
||||
// *** Template ***
|
||||
return foundry.applications.handlebars.renderTemplate(`${CONFIG.l5r5e.paths.templates}gm/monitor/tooltips/weapons.html`, {
|
||||
readied,
|
||||
sheathed,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Get tooltips information for this character
|
||||
* @param {ActorL5r5e} actor
|
||||
* @return {string}
|
||||
* @private
|
||||
*/
|
||||
async _getTooltipGlobal(actor) {
|
||||
async #getTooltipGlobal(actor) {
|
||||
const actorData = (await actor.sheet?.getData()?.data) || actor;
|
||||
|
||||
// Peculiarities
|
||||
const pec = actor.items.filter((e) => e.type === "peculiarity");
|
||||
const adv = pec
|
||||
.filter((e) => ["distinction", "passion"].includes(e.system.peculiarity_type))
|
||||
.map((e) => e.name)
|
||||
const Peculiarities = actor.items.filter((e) => e.type === "peculiarity");
|
||||
const advantages = Peculiarities
|
||||
.filter((item) => ["distinction", "passion"].includes(item.system.peculiarity_type))
|
||||
.map((item) => item.name)
|
||||
.join(", ");
|
||||
const dis = pec
|
||||
.filter((e) => ["adversity", "anxiety"].includes(e.system.peculiarity_type))
|
||||
.map((e) => e.name)
|
||||
const disadvantages = Peculiarities
|
||||
.filter((item) => ["adversity", "anxiety"].includes(item.system.peculiarity_type))
|
||||
.map((item) => item.name)
|
||||
.join(", ");
|
||||
|
||||
// *** Template ***
|
||||
return renderTemplate(`${CONFIG.l5r5e.paths.templates}gm/monitor-tooltips/global.html`, {
|
||||
return foundry.applications.handlebars.renderTemplate(`${CONFIG.l5r5e.paths.templates}gm/monitor/tooltips/global.html`, {
|
||||
actorData: actorData,
|
||||
advantages: adv,
|
||||
disadvantages: dis,
|
||||
advantages: advantages,
|
||||
disadvantages: disadvantages,
|
||||
suffix: actorData.system.template === "pow" ? "_pow" : "",
|
||||
actor_type: actor.type,
|
||||
});
|
||||
@@ -414,68 +624,39 @@ export class GmMonitor extends FormApplication {
|
||||
* @return {string}
|
||||
* @private
|
||||
*/
|
||||
async _getTooltipArmiesGlobal(actor) {
|
||||
async #getTooltipArmiesGlobal(actor) {
|
||||
const actorData = (await actor.sheet?.getData()?.data) || actor;
|
||||
|
||||
// *** Template ***
|
||||
return renderTemplate(`${CONFIG.l5r5e.paths.templates}gm/monitor-tooltips/global-armies.html`, {
|
||||
return foundry.applications.handlebars.renderTemplate(`${CONFIG.l5r5e.paths.templates}gm/monitor/tooltips/global-armies.html`, {
|
||||
actorData: actorData,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Get weapons information for this actor
|
||||
* @param {ActorL5r5e} actor
|
||||
* @return {string}
|
||||
* @private
|
||||
* @param {ActorL5r5e} actor The actor that is being updated
|
||||
*/
|
||||
async _getTooltipWeapons(actor) {
|
||||
const display = (e) => {
|
||||
return (
|
||||
e.name +
|
||||
` (<i class="fas fa-arrows-alt-h"> ${e.system.range}</i>` +
|
||||
` / <i class="fas fa-tint"> ${e.system.damage}</i>` +
|
||||
` / <i class="fas fa-skull"> ${e.system.deadliness}</i>)`
|
||||
);
|
||||
};
|
||||
|
||||
// Readied Weapons
|
||||
const readied = actor.items
|
||||
.filter((e) => e.type === "weapon" && e.system.equipped && !!e.system.readied)
|
||||
.map((e) => display(e));
|
||||
|
||||
// Equipped Weapons
|
||||
const sheathed = actor.items
|
||||
.filter((e) => e.type === "weapon" && e.system.equipped && !e.system.readied)
|
||||
.map((e) => display(e));
|
||||
|
||||
// *** Template ***
|
||||
return renderTemplate(`${CONFIG.l5r5e.paths.templates}gm/monitor-tooltips/weapons.html`, {
|
||||
readied,
|
||||
sheathed,
|
||||
});
|
||||
#onUpdateActor(actor) {
|
||||
if (this.context.actors.includes(actor)) {
|
||||
this.render(false);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get armors information for this actor
|
||||
* @param {ActorL5r5e} actor
|
||||
* @return {string}
|
||||
* @private
|
||||
* @param {Setting} setting The setting that is being updated
|
||||
*/
|
||||
async _getTooltipArmors(actor) {
|
||||
// Equipped Armors
|
||||
const armors = actor.items
|
||||
.filter((e) => e.type === "armor" && e.system.equipped)
|
||||
.map(
|
||||
(e) =>
|
||||
e.name +
|
||||
` (<i class="fas fa-tint">${e.system.armor.physical}</i>` +
|
||||
` / <i class="fas fa-bolt">${e.system.armor.supernatural}</i>)`
|
||||
);
|
||||
|
||||
// *** Template ***
|
||||
return renderTemplate(`${CONFIG.l5r5e.paths.templates}gm/monitor-tooltips/armors.html`, {
|
||||
armors,
|
||||
});
|
||||
#onUpdateSetting(setting) {
|
||||
switch (setting.key) {
|
||||
case "l5r5e.gm-monitor-actors":
|
||||
this.render(false);
|
||||
break;
|
||||
case "l5r5e.initiative-prepared-character":
|
||||
case "l5r5e.initiative-prepared-adversary":
|
||||
case "l5r5e.initiative-prepared-minion":
|
||||
this.render(false);
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,41 +1,100 @@
|
||||
/**
|
||||
* L5R GM Toolbox dialog
|
||||
* @extends {FormApplication}
|
||||
*/
|
||||
export class GmToolbox extends FormApplication {
|
||||
/**
|
||||
* Settings
|
||||
*/
|
||||
object = {};
|
||||
const HandlebarsApplicationMixin = foundry.applications.api.HandlebarsApplicationMixin;
|
||||
const ApplicationV2 = foundry.applications.api.ApplicationV2;
|
||||
|
||||
export class GmToolbox extends HandlebarsApplicationMixin(ApplicationV2) {
|
||||
/** @override ApplicationV2 */
|
||||
static get DEFAULT_OPTIONS() { return {
|
||||
id: "l5r5e-gm-toolbox",
|
||||
window: {
|
||||
contentClasses: ["l5r5e", "gm-toolbox", "faded-ui"],
|
||||
title: "l5r5e.gm.toolbox.title",
|
||||
minimizable: true,
|
||||
},
|
||||
position: {
|
||||
width: "auto",
|
||||
height: "auto"
|
||||
},
|
||||
actions: {
|
||||
open_gm_monitor: GmToolbox.#openGmMonitor,
|
||||
toggle_hide_difficulty: GmToolbox.#onToggleHideDifficulty,
|
||||
// Buttons map (0: left, 1: middle, 2: right, 3: extra 1, 4: extra 2)
|
||||
// Foundry v13 use middle (1) for popup and currently not bind it for custom
|
||||
// See : https://github.com/foundryvtt/foundryvtt/issues/12531
|
||||
change_difficulty: {
|
||||
buttons: [0, 1, 2],
|
||||
handler: GmToolbox.#onChangeDifficulty
|
||||
},
|
||||
reset_void: {
|
||||
buttons: [0, 1, 2, 3, 4],
|
||||
handler: GmToolbox.#onResetVoid
|
||||
},
|
||||
sleep: {
|
||||
buttons: [0, 1, 2, 3, 4],
|
||||
handler: GmToolbox.#onSleep
|
||||
},
|
||||
scene_end: {
|
||||
buttons: [0, 1, 2, 3, 4],
|
||||
handler: GmToolbox.#onSceneEnd
|
||||
},
|
||||
}
|
||||
}};
|
||||
|
||||
/** @override HandlebarsApplicationMixin */
|
||||
static PARTS = {
|
||||
main: {
|
||||
id: "gm-tool-content",
|
||||
template: "systems/l5r5e/templates/" + "gm/gm-toolbox.html"
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Assign the default options
|
||||
* @override
|
||||
* hooks we act upon, saved since we need to remove them when this window is not open
|
||||
*/
|
||||
static get defaultOptions() {
|
||||
const x = $(window).width();
|
||||
const y = $(window).height();
|
||||
return foundry.utils.mergeObject(super.defaultOptions, {
|
||||
id: "l5r5e-gm-toolbox",
|
||||
classes: ["l5r5e", "gm-toolbox"],
|
||||
template: CONFIG.l5r5e.paths.templates + "gm/gm-toolbox.html",
|
||||
title: game.i18n.localize("l5r5e.gm.toolbox.title"),
|
||||
left: x - 630,
|
||||
top: y - 98,
|
||||
closeOnSubmit: false,
|
||||
submitOnClose: false,
|
||||
submitOnChange: true,
|
||||
minimizable: false,
|
||||
#hooks = [];
|
||||
|
||||
constructor() {
|
||||
super();
|
||||
this.#hooks.push({
|
||||
hook: "updateSetting",
|
||||
fn: Hooks.on("updateSetting", (setting) => this.#onUpdateSetting(setting))
|
||||
});
|
||||
}
|
||||
|
||||
/** @override ApplicationV2*/
|
||||
async _prepareContext() {
|
||||
return {
|
||||
difficulty: game.settings.get(CONFIG.l5r5e.namespace, "initiative-difficulty-value"),
|
||||
difficultyHidden: game.settings.get(CONFIG.l5r5e.namespace, "initiative-difficulty-hidden"),
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
* @param {ApplicationOptions} options
|
||||
* The ApplicationV2 always adds the close button so just remove it when redering the frame
|
||||
* @override ApplicationV2
|
||||
*/
|
||||
constructor(options = {}) {
|
||||
super(options);
|
||||
this._initialize();
|
||||
async _renderFrame(options) {
|
||||
const frame = await super._renderFrame(options);
|
||||
$(frame).find('button[data-action="close"]').remove();
|
||||
return frame;
|
||||
}
|
||||
|
||||
/**
|
||||
* The ApplicationV2 always adds the close button so just remove it when redering the frame
|
||||
* @override ApplicationV2
|
||||
*/
|
||||
_onFirstRender(context, options) {
|
||||
//const x = $(window).width();
|
||||
const y = $(window).height();
|
||||
options.position.top = y - 220;
|
||||
options.position.left = 220; //x - 630;
|
||||
}
|
||||
|
||||
/**
|
||||
* The GM Toolbox should not be removed when toggling the main menu with the esc key etc.
|
||||
* @override ApplicationV2
|
||||
*/
|
||||
async close(options) {
|
||||
return Promise.resolve(this);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -45,210 +104,156 @@ export class GmToolbox extends FormApplication {
|
||||
if (!game.user.isGM) {
|
||||
return;
|
||||
}
|
||||
this._initialize();
|
||||
this.render(false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize the values
|
||||
* @private
|
||||
*/
|
||||
_initialize() {
|
||||
this.object = {
|
||||
difficulty: game.settings.get(CONFIG.l5r5e.namespace, "initiative-difficulty-value"),
|
||||
difficultyHidden: game.settings.get(CONFIG.l5r5e.namespace, "initiative-difficulty-hidden"),
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Do not close this dialog
|
||||
* @override
|
||||
*/
|
||||
async close(options = {}) {
|
||||
// TODO better implementation needed : see KeyboardManager._onEscape(event, up, modifiers)
|
||||
// This windows is always open, so esc key is stuck at step 2 : Object.keys(ui.windows).length > 0
|
||||
// Case 3 (GM) - release controlled objects
|
||||
if (canvas?.ready && game.user.isGM && Object.keys(canvas.activeLayer.controlled).length) {
|
||||
canvas.activeLayer.releaseAll();
|
||||
static #openGmMonitor() {
|
||||
const app = foundry.applications.instances.get("l5r5e-gm-monitor")
|
||||
if (app) {
|
||||
app.close();
|
||||
} else {
|
||||
// Case 4 - toggle the main menu
|
||||
ui.menu.toggle();
|
||||
new game.l5r5e.GmMonitor().render(true);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Prevent non GM to render this windows
|
||||
* @override
|
||||
* @param {PointerEvent} event The originating click event
|
||||
*/
|
||||
render(force = false, options = {}) {
|
||||
if (!game.user.isGM) {
|
||||
static #onChangeDifficulty(event) {
|
||||
let difficulty = game.settings.get(CONFIG.l5r5e.namespace, "initiative-difficulty-value");
|
||||
switch (event.button) {
|
||||
case 0: // left click
|
||||
difficulty = Math.min(9, difficulty + 1);
|
||||
break;
|
||||
case 1: // middle click
|
||||
difficulty = 2;
|
||||
break;
|
||||
case 2: // right click
|
||||
difficulty = Math.max(0, difficulty - 1);
|
||||
break;
|
||||
}
|
||||
game.settings.set(CONFIG.l5r5e.namespace, "initiative-difficulty-value", difficulty);
|
||||
}
|
||||
|
||||
static #onToggleHideDifficulty() {
|
||||
const hiddenSetting = game.settings.get(CONFIG.l5r5e.namespace, "initiative-difficulty-hidden")
|
||||
game.settings.set(CONFIG.l5r5e.namespace, "initiative-difficulty-hidden", !hiddenSetting);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {Boolean} allActors
|
||||
* @param {ActorL5r5e} actor
|
||||
* @returns {Boolean}
|
||||
*/
|
||||
static #updatableCharacter(allActors, actor) {
|
||||
if (!actor.isCharacterType) {
|
||||
return false;
|
||||
}
|
||||
this.position.width = "auto";
|
||||
this.position.height = "auto";
|
||||
return super.render(force, options);
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the close button
|
||||
* @override
|
||||
*/
|
||||
_getHeaderButtons() {
|
||||
return [];
|
||||
}
|
||||
|
||||
/**
|
||||
* Construct and return the data object used to render the HTML template for this form application.
|
||||
* @param options
|
||||
* @return {Object}
|
||||
* @override
|
||||
*/
|
||||
async getData(options = null) {
|
||||
return {
|
||||
...(await super.getData(options)),
|
||||
data: this.object,
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Listen to html elements
|
||||
* @param {jQuery} html HTML content of the sheet.
|
||||
* @override
|
||||
*/
|
||||
activateListeners(html) {
|
||||
super.activateListeners(html);
|
||||
|
||||
if (!game.user.isGM) {
|
||||
return;
|
||||
if (allActors) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// Modify difficulty hidden
|
||||
html.find(`.difficulty_hidden`).on("click", (event) => {
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
this.object.difficultyHidden = !this.object.difficultyHidden;
|
||||
game.settings
|
||||
.set(CONFIG.l5r5e.namespace, "initiative-difficulty-hidden", this.object.difficultyHidden)
|
||||
.then(() => this.submit());
|
||||
});
|
||||
|
||||
// Modify difficulty (TN)
|
||||
html.find(`.difficulty`).on("mousedown", (event) => {
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
switch (event.which) {
|
||||
case 1:
|
||||
// left clic - add 1
|
||||
this.object.difficulty = Math.min(9, this.object.difficulty + 1);
|
||||
break;
|
||||
case 2:
|
||||
// middle clic - reset to 2
|
||||
this.object.difficulty = 2;
|
||||
break;
|
||||
case 3:
|
||||
// right clic - minus 1
|
||||
this.object.difficulty = Math.max(0, this.object.difficulty - 1);
|
||||
break;
|
||||
}
|
||||
game.settings.set(CONFIG.l5r5e.namespace, "initiative-difficulty-value", this.object.difficulty).then(() => this.submit());
|
||||
});
|
||||
|
||||
// Scene End, Sleep, Void Pts
|
||||
html.find(`.gm_actor_updates`).on("mousedown", this._updatesActors.bind(this));
|
||||
|
||||
// GM Monitor
|
||||
html.find(`.gm_monitor`).on("click", (event) => {
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
|
||||
const app = Object.values(ui.windows).find((e) => e.id === "l5r5e-gm-monitor");
|
||||
if (app) {
|
||||
app.close();
|
||||
} else {
|
||||
new game.l5r5e.GmMonitor().render(true);
|
||||
}
|
||||
});
|
||||
return actor.isCharacter && actor.hasPlayerOwnerActive
|
||||
}
|
||||
|
||||
/**
|
||||
* This method is called upon form submission after form data is validated
|
||||
* @param event The initial triggering submission event
|
||||
* @param formData The object of validated form data with which to update the object
|
||||
* @returns A Promise which resolves once the update operation has completed
|
||||
* @override
|
||||
* @param {Boolean} allActors
|
||||
* @param {String} type
|
||||
*/
|
||||
async _updateObject(event, formData) {
|
||||
this.render(false);
|
||||
static #uiNotification(allActors, type) {
|
||||
ui.notifications.info(
|
||||
` <i class="fas fa-user${allActors ? "s" : ""}"></i> ` + game.i18n.localize(`l5r5e.gm.toolbox.${type}_info`)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update all actors
|
||||
* @param {Event} event
|
||||
* @private
|
||||
* @param {PointerEvent} event The originating click event
|
||||
*/
|
||||
async _updatesActors(event) {
|
||||
if (!game.user.isGM) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Left clic: assigned characters only, others: all actors
|
||||
const isAll = event.which !== 1;
|
||||
const type = $(event.currentTarget).data("type");
|
||||
|
||||
static async #onResetVoid(event) {
|
||||
const allActors = event.button !== 0;
|
||||
for await (const actor of game.actors.contents) {
|
||||
// Only characters types
|
||||
if (!actor.isCharacterType) {
|
||||
if (!GmToolbox.#updatableCharacter(allActors, actor)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Manage left/right button
|
||||
if (!isAll && (!actor.isCharacter || !actor.hasPlayerOwnerActive)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
switch (type) {
|
||||
case "sleep":
|
||||
// Remove 'water x2' fatigue points
|
||||
actor.system.fatigue.value = Math.max(
|
||||
0,
|
||||
actor.system.fatigue.value - Math.ceil(actor.system.rings.water * 2)
|
||||
);
|
||||
break;
|
||||
|
||||
case "scene_end":
|
||||
// If more than half the value => roundup half conflit & fatigue
|
||||
actor.system.fatigue.value = Math.min(
|
||||
actor.system.fatigue.value,
|
||||
Math.ceil(actor.system.fatigue.max / 2)
|
||||
);
|
||||
actor.system.strife.value = Math.min(
|
||||
actor.system.strife.value,
|
||||
Math.ceil(actor.system.strife.max / 2)
|
||||
);
|
||||
break;
|
||||
|
||||
case "reset_void":
|
||||
actor.system.void_points.value = Math.ceil(actor.system.void_points.max / 2);
|
||||
break;
|
||||
}
|
||||
|
||||
await actor.update({
|
||||
system: {
|
||||
fatigue: {
|
||||
value: actor.system.fatigue.value,
|
||||
},
|
||||
strife: {
|
||||
value: actor.system.strife.value,
|
||||
},
|
||||
void_points: {
|
||||
value: actor.system.void_points.value,
|
||||
value: Math.ceil(actor.system.void_points.max / 2),
|
||||
},
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
ui.notifications.info(
|
||||
` <i class="fas fa-user${isAll ? "s" : ""}"></i> ` + game.i18n.localize(`l5r5e.gm.toolbox.${type}_info`)
|
||||
);
|
||||
GmToolbox.#uiNotification(allActors, "reset_void");
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {PointerEvent} event The originating click event
|
||||
*/
|
||||
static async #onSleep(event) {
|
||||
const allActors = event.button !== 0;
|
||||
for await (const actor of game.actors.contents) {
|
||||
if (!GmToolbox.#updatableCharacter(allActors, actor)) {
|
||||
continue;
|
||||
}
|
||||
await actor.update({
|
||||
system: {
|
||||
fatigue: {
|
||||
value: Math.max(0,
|
||||
actor.system.fatigue.value - Math.ceil(actor.system.rings.water * 2)
|
||||
),
|
||||
}
|
||||
},
|
||||
});
|
||||
await actor.removeConditions(new Set(["exhausted"]));
|
||||
}
|
||||
|
||||
GmToolbox.#uiNotification(allActors, "sleep");
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {PointerEvent} event The originating click event
|
||||
*/
|
||||
static async #onSceneEnd(event) {
|
||||
const allActors = event.button !== 0;
|
||||
for await (const actor of game.actors.contents) {
|
||||
if (!GmToolbox.#updatableCharacter(allActors, actor)
|
||||
|| actor.statuses.has("exhausted")) {
|
||||
continue;
|
||||
}
|
||||
|
||||
await actor.update({
|
||||
system: {
|
||||
fatigue: {
|
||||
value: Math.min(
|
||||
actor.system.fatigue.value,
|
||||
Math.ceil(actor.system.fatigue.max / 2)
|
||||
)
|
||||
},
|
||||
strife: {
|
||||
value: Math.min(
|
||||
actor.system.strife.value,
|
||||
Math.ceil(actor.system.strife.max / 2)
|
||||
)
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
GmToolbox.#uiNotification(allActors, "scene_end");
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {Setting} setting The setting that is being updated
|
||||
*/
|
||||
async #onUpdateSetting(setting) {
|
||||
switch (setting.key) {
|
||||
case "l5r5e.initiative-difficulty-value":
|
||||
case "l5r5e.initiative-difficulty-hidden":
|
||||
this.render(false);
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,68 +0,0 @@
|
||||
/**
|
||||
* L5R Help dialog
|
||||
* @extends {FormApplication}
|
||||
*/
|
||||
export class HelpDialog extends FormApplication {
|
||||
/**
|
||||
* Payload Object
|
||||
*/
|
||||
object = {};
|
||||
|
||||
/**
|
||||
* Assign the default options
|
||||
* @override
|
||||
*/
|
||||
static get defaultOptions() {
|
||||
return foundry.utils.mergeObject(super.defaultOptions, {
|
||||
id: "l5r5e-help-dialog",
|
||||
classes: ["l5r5e", "help-dialog"],
|
||||
template: CONFIG.l5r5e.paths.templates + "help/help-dialog.html",
|
||||
title: game.i18n.localize("l5r5e.logo.title"),
|
||||
width: 400,
|
||||
height: 200,
|
||||
closeOnSubmit: false,
|
||||
submitOnClose: false,
|
||||
submitOnChange: false,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Construct and return the data object used to render the HTML template for this form application.
|
||||
* @param options
|
||||
* @return {Object}
|
||||
*/
|
||||
async getData(options = null) {
|
||||
return {
|
||||
...(await super.getData(options)),
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Listen to html elements
|
||||
* @param {jQuery} html HTML content of the sheet.
|
||||
* @override
|
||||
*/
|
||||
activateListeners(html) {
|
||||
super.activateListeners(html);
|
||||
|
||||
// Buttons
|
||||
html.find(`button`).on("click", (event) => {
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
const name = $(event.currentTarget).data("type");
|
||||
ui.notifications.info(`l5r5e.logo.${name}.info`, {localize: true});
|
||||
window.open(game.i18n.localize(`l5r5e.logo.${name}.link`), "_blank");
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* This method is called upon form submission after form data is validated
|
||||
* @param event {Event} The initial triggering submission event
|
||||
* @param formData {Object} The object of validated form data with which to update the object
|
||||
* @returns {Promise} A Promise which resolves once the update operation has completed
|
||||
* @override
|
||||
*/
|
||||
_updateObject(event, formData) {
|
||||
// Nothing, but needed to be override
|
||||
}
|
||||
}
|
||||
@@ -1,3 +1,5 @@
|
||||
import { L5r5ePopupManager } from './misc/l5r5e-popup-manager.js';
|
||||
|
||||
/**
|
||||
* Extends the actor to process special things from L5R.
|
||||
*/
|
||||
@@ -187,12 +189,12 @@ export class HelpersL5r5e {
|
||||
|
||||
// Unknown pack object, iterate all packs
|
||||
if (!document) {
|
||||
for (const comp of game.packs) {
|
||||
await Promise.all(game.packs.map(async (comp) => {
|
||||
const tmpData = await comp.getDocument(id);
|
||||
if (tmpData) {
|
||||
document = HelpersL5r5e.createDocumentFromCompendium({ type, data: tmpData });
|
||||
}
|
||||
}
|
||||
}));
|
||||
}
|
||||
|
||||
// Final
|
||||
@@ -382,7 +384,7 @@ export class HelpersL5r5e {
|
||||
const title = game.i18n.format("DOCUMENT.Create", { type: game.i18n.localize("Item") });
|
||||
|
||||
// Render the template
|
||||
const html = await renderTemplate(`${CONFIG.l5r5e.paths.templates}dialogs/choose-item-type-dialog.html`, {
|
||||
const html = await foundry.applications.handlebars.renderTemplate(`${CONFIG.l5r5e.paths.templates}dialogs/choose-item-type-dialog.html`, {
|
||||
type: null,
|
||||
types: types.reduce((obj, t) => {
|
||||
const label = CONFIG.Item.typeLabels[t] ?? t;
|
||||
@@ -401,12 +403,22 @@ export class HelpersL5r5e {
|
||||
});
|
||||
}
|
||||
|
||||
static getApplication(appId) {
|
||||
const app = Object.values(ui.windows).find((e) => e.id === appId);
|
||||
if(app)
|
||||
return app;
|
||||
|
||||
const appV2 = foundry.applications.instances.get(appId)
|
||||
if(appV2)
|
||||
return appV2;
|
||||
}
|
||||
|
||||
/**
|
||||
* Notify Applications using Difficulty settings that the values was changed
|
||||
*/
|
||||
static notifyDifficultyChange() {
|
||||
["l5r5e-dice-picker-dialog", "l5r5e-gm-toolbox"].forEach((appId) => {
|
||||
const app = Object.values(ui.windows).find((e) => e.id === appId);
|
||||
["l5r5e-dice-picker-dialog"].forEach((appId) => {
|
||||
const app = this.getApplication(appId);
|
||||
if (app && typeof app.refresh === "function") {
|
||||
app.refresh();
|
||||
}
|
||||
@@ -419,9 +431,7 @@ export class HelpersL5r5e {
|
||||
*/
|
||||
static refreshLocalAndSocket(appId) {
|
||||
game.l5r5e.sockets.refreshAppId(appId);
|
||||
Object.values(ui.windows)
|
||||
.find((e) => e.id === appId)
|
||||
?.refresh();
|
||||
this.getApplication(appId)?.refresh();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -501,13 +511,16 @@ export class HelpersL5r5e {
|
||||
});
|
||||
|
||||
// Item detail tooltips
|
||||
this.popupManager(html.find(".l5r5e-tooltip"), async (event) => {
|
||||
const item = await HelpersL5r5e.getEmbedItemByEvent(event, actor);
|
||||
if (!item) {
|
||||
return;
|
||||
new L5r5ePopupManager(
|
||||
html.find(".l5r5e-tooltip"),
|
||||
async (event) => {
|
||||
const item = await HelpersL5r5e.getEmbedItemByEvent(event, actor);
|
||||
if (!item) {
|
||||
return;
|
||||
}
|
||||
return await item.renderTextTemplate();
|
||||
}
|
||||
return await item.renderTextTemplate();
|
||||
});
|
||||
);
|
||||
|
||||
// Open actor sheet
|
||||
html.find(".open-sheet-from-uuid").on("click", async (event) => {
|
||||
@@ -526,52 +539,6 @@ export class HelpersL5r5e {
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Do the Popup for the selected element
|
||||
* @param {Selector} selector HTML Selector
|
||||
* @param {function} callback Callback function(event), must return the html to display
|
||||
*/
|
||||
static popupManager(selector, callback) {
|
||||
const popupPosition = (event, popup) => {
|
||||
let left = +event.clientX + 60,
|
||||
top = +event.clientY;
|
||||
|
||||
let maxY = window.innerHeight - popup.outerHeight();
|
||||
if (top > maxY) {
|
||||
top = maxY - 10;
|
||||
}
|
||||
|
||||
let maxX = window.innerWidth - popup.outerWidth();
|
||||
if (left > maxX) {
|
||||
left -= popup.outerWidth() + 100;
|
||||
}
|
||||
return { left: left + "px", top: top + "px", visibility: "visible" };
|
||||
};
|
||||
|
||||
selector
|
||||
.on("mouseenter", async (event) => {
|
||||
$(document.body).find("#l5r5e-tooltip-ct").remove();
|
||||
|
||||
const tpl = await callback(event);
|
||||
if (!tpl) {
|
||||
return;
|
||||
}
|
||||
|
||||
$(document.body).append(
|
||||
`<div id="l5r5e-tooltip-ct" class="l5r5e-tooltip l5r5e-tooltip-ct">${tpl}</div>`
|
||||
);
|
||||
})
|
||||
.on("mousemove", (event) => {
|
||||
const popup = $(document.body).find("#l5r5e-tooltip-ct");
|
||||
if (popup) {
|
||||
popup.css(popupPosition(event, popup));
|
||||
}
|
||||
})
|
||||
.on("mouseleave", () => {
|
||||
$(document.body).find("#l5r5e-tooltip-ct").remove();
|
||||
}); // tooltips
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a Item from a Actor Sheet
|
||||
* @param {Event} event HTML Event
|
||||
|
||||
@@ -1,6 +1,20 @@
|
||||
import { L5r5eHtmlMultiSelectElement } from "./misc/l5r5e-multiselect.js";
|
||||
|
||||
export default class HooksL5r5e {
|
||||
/**
|
||||
* Do initialization
|
||||
*/
|
||||
static async init() {
|
||||
// L5R conditions
|
||||
if (game.settings.get(CONFIG.l5r5e.namespace, "show-all-status-effects")) {
|
||||
// Add L5R conditions to foundry conditions (don't restrict users)
|
||||
CONFIG.statusEffects.push(...CONFIG.l5r5e.conditions);
|
||||
} else {
|
||||
// L5R conditions only
|
||||
CONFIG.statusEffects = CONFIG.l5r5e.conditions;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Do anything after initialization but before ready
|
||||
*/
|
||||
@@ -38,20 +52,15 @@ export default class HooksL5r5e {
|
||||
}
|
||||
});
|
||||
|
||||
// For some reasons, not always really ready, so wait a little
|
||||
// For some reason, not always really ready, so wait a little
|
||||
await new Promise((r) => setTimeout(r, 2000));
|
||||
|
||||
// Settings TN and EncounterType
|
||||
if (game.user.isGM) {
|
||||
new game.l5r5e.GmToolbox().render(true);
|
||||
new game.l5r5e.GmToolbox().render(true);
|
||||
}
|
||||
|
||||
// ***** UI *****
|
||||
// Open Help dialog on clic on logo
|
||||
$("#logo")
|
||||
.on("click", () => new game.l5r5e.HelpDialog().render(true))
|
||||
.prop("title", game.i18n.localize("l5r5e.logo.alt"));
|
||||
|
||||
// If any disclaimer "not translated by Edge"
|
||||
const disclaimer = game.i18n.localize("l5r5e.global.edge_translation_disclaimer");
|
||||
if (disclaimer !== "" && disclaimer !== "l5r5e.global.edge_translation_disclaimer") {
|
||||
@@ -71,13 +80,15 @@ export default class HooksL5r5e {
|
||||
}
|
||||
}
|
||||
}
|
||||
game.settings.set(CONFIG.l5r5e.namespace, "all-compendium-references", Array.from(references));
|
||||
game.settings.set(CONFIG.l5r5e.namespace, "all-compendium-references", references);
|
||||
}
|
||||
|
||||
/**
|
||||
* SidebarTab
|
||||
*/
|
||||
static renderSidebarTab(app, html, data) {
|
||||
html = $(html); // basic patch for v13
|
||||
|
||||
switch (app.tabName) {
|
||||
case "chat":
|
||||
// Add DP on dice icon
|
||||
@@ -114,23 +125,30 @@ export default class HooksL5r5e {
|
||||
// Add title on button dice icon
|
||||
html.find(".chat-control-icon")[0].title = game.i18n.localize("l5r5e.dice.dicepicker.title");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
case "settings":
|
||||
// Add Changelog link
|
||||
html.find("#game-details .system").append(
|
||||
`<span><a href="${game.system.changelog}" target="_blank">Changelog</a>`
|
||||
+ ` <a href="${game.i18n.localize("l5r5e.settings.wiki.link")}" target="_blank">${game.i18n.localize("l5r5e.settings.wiki.title")}</a>`
|
||||
+ ` <a href="${game.i18n.localize("l5r5e.settings.custom-compendiums.link")}" target="_blank">${game.i18n.localize("l5r5e.settings.custom-compendiums.title")}</a>`
|
||||
+ `</span>`
|
||||
);
|
||||
break;
|
||||
}
|
||||
static async activateSettings(app) {
|
||||
const html = app.element
|
||||
const pip = html.querySelector(".info .system .notification-pip");
|
||||
html.querySelector(".info.system.l5r5e")?.remove();
|
||||
|
||||
const section = document.createElement("section");
|
||||
section.className = "info system l5r5e";
|
||||
const tpl = await foundry.applications.handlebars.renderTemplate(`${CONFIG.l5r5e.paths.templates}settings/logo.html`, {
|
||||
SystemVersion: game.system.version
|
||||
});
|
||||
section.append(foundry.utils.parseHTML(tpl));
|
||||
if ( pip ) section.querySelector(".system-info").insertAdjacentElement("beforeend", pip);
|
||||
html.querySelector(".info").insertAdjacentElement("afterend", section);
|
||||
}
|
||||
|
||||
/**
|
||||
* Chat Message
|
||||
*/
|
||||
static renderChatMessage(message, html, data) {
|
||||
html = $(html); // basic patch for v13
|
||||
|
||||
if (message.isRoll) {
|
||||
// Add an extra CSS class to roll
|
||||
html.addClass("roll");
|
||||
@@ -161,7 +179,7 @@ export default class HooksL5r5e {
|
||||
*/
|
||||
static async renderCombatTracker(app, html, data) {
|
||||
// Display Combat bar (only for GMs)
|
||||
await this._gmCombatBar(app, html, data);
|
||||
await this._gmCombatBar(app, $(html), data);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -174,6 +192,8 @@ export default class HooksL5r5e {
|
||||
return;
|
||||
}
|
||||
|
||||
html = $(html); // basic patch for v13
|
||||
|
||||
// *** Conf ***
|
||||
const encounterTypeList = Object.keys(CONFIG.l5r5e.initiativeSkills);
|
||||
const prepared = {
|
||||
@@ -183,7 +203,7 @@ export default class HooksL5r5e {
|
||||
};
|
||||
|
||||
// *** Template ***
|
||||
const tpl = await renderTemplate(`${CONFIG.l5r5e.paths.templates}gm/combat-tracker-bar.html`, {
|
||||
const tpl = await foundry.applications.handlebars.renderTemplate(`${CONFIG.l5r5e.paths.templates}gm/combat-tracker-bar.html`, {
|
||||
encounterType: game.settings.get(CONFIG.l5r5e.namespace, "initiative-encounter"),
|
||||
encounterTypeList,
|
||||
prepared,
|
||||
@@ -229,6 +249,8 @@ export default class HooksL5r5e {
|
||||
* Compendium display (Add filters)
|
||||
*/
|
||||
static async renderCompendium(app, html, data) {
|
||||
html = $(html); // basic patch for v13
|
||||
|
||||
if (app.collection.documentName === "Item") {
|
||||
const content = await app.collection.getDocuments();
|
||||
const sourcesInThisCompendium = new Set([]);
|
||||
@@ -253,7 +275,7 @@ export default class HooksL5r5e {
|
||||
// Add additional data to the entries to make it faster to lookup.
|
||||
// Add Ring/rank/rarity information
|
||||
for (const document of content) {
|
||||
const entry = entries.filter(`[data-document-id="${document.id}"]`);
|
||||
const entry = entries.filter(`[data-entry-id="${document.id}"]`);
|
||||
|
||||
// Hide filter if only one value of this type is found in the compendium
|
||||
const autoDisplayFilter = (props, documentData = null) => {
|
||||
@@ -289,23 +311,23 @@ export default class HooksL5r5e {
|
||||
|
||||
// Add ring/rank/rarity information on the item in the compendium view
|
||||
if (document.system?.ring || document.system?.rarity || document.system?.rank) {
|
||||
const ringRarityRank = await renderTemplate(`${CONFIG.l5r5e.paths.templates}compendium/ring-rarity-rank.html`, document.system);
|
||||
const ringRarityRank = await foundry.applications.handlebars.renderTemplate(`${CONFIG.l5r5e.paths.templates}compendium/ring-rarity-rank.html`, document.system);
|
||||
entry.append(ringRarityRank);
|
||||
}
|
||||
}
|
||||
|
||||
// Setup filters
|
||||
const officialContent = game.settings.get(CONFIG.l5r5e.namespace, "compendium-official-content-for-players");
|
||||
const unofficialContent = game.settings.get(CONFIG.l5r5e.namespace, "compendium-unofficial-content-for-players");
|
||||
const allCompendiumReferences = game.settings.get(CONFIG.l5r5e.namespace, "all-compendium-references")
|
||||
const officialContentSet = game.settings.get(CONFIG.l5r5e.namespace, "compendium-official-content-for-players");
|
||||
const unofficialContentSet = game.settings.get(CONFIG.l5r5e.namespace, "compendium-unofficial-content-for-players");
|
||||
const allCompendiumReferencesSet = game.settings.get(CONFIG.l5r5e.namespace, "all-compendium-references")
|
||||
const hideEmptySourcesFromPlayers = game.settings.get(CONFIG.l5r5e.namespace, "compendium-hide-empty-sources-from-players");
|
||||
|
||||
const unavailableSourceForPlayers = allCompendiumReferences.filter((element) => {
|
||||
const unavailableSourceForPlayersSet = new Set([...allCompendiumReferencesSet].filter((element) => {
|
||||
if (CONFIG.l5r5e.sourceReference[element]) {
|
||||
return officialContent.length > 0 ? !officialContent.includes(element) : false;
|
||||
return officialContentSet.size > 0 ? !officialContentSet.has(element) : false;
|
||||
}
|
||||
return unofficialContent.length > 0 ? !unofficialContent.includes(element) : false;
|
||||
});
|
||||
return unofficialContentSet.size > 0 ? !unofficialContentSet.has(element) : false;
|
||||
}));
|
||||
|
||||
// Create filter function
|
||||
const applyCompendiumFilter = () => {
|
||||
@@ -325,7 +347,7 @@ export default class HooksL5r5e {
|
||||
let shouldShow = true;
|
||||
|
||||
// Handle unavailable sources
|
||||
if (unavailableSourceForPlayers.includes(lineSource)) {
|
||||
if (unavailableSourceForPlayersSet.has(lineSource)) {
|
||||
if (game.user.isGM) {
|
||||
shouldShow &= true;
|
||||
$(this)
|
||||
@@ -372,7 +394,7 @@ export default class HooksL5r5e {
|
||||
if (!filtersToShow[filterType]) {
|
||||
return;
|
||||
}
|
||||
const filterTemplate = await renderTemplate(
|
||||
const filterTemplate = await foundry.applications.handlebars.renderTemplate(
|
||||
`${CONFIG.l5r5e.paths.templates}compendium/${templateFile}.html`,
|
||||
templateData
|
||||
);
|
||||
@@ -397,33 +419,33 @@ export default class HooksL5r5e {
|
||||
|
||||
if (filtersToShow.source) {
|
||||
// Build the source select
|
||||
const selectableSources = allCompendiumReferences.map((reference) => ({
|
||||
const selectableSourcesArray = [...allCompendiumReferencesSet].map((reference) => ({
|
||||
value: reference,
|
||||
label: CONFIG.l5r5e.sourceReference[reference]?.label ?? reference,
|
||||
translate: true,
|
||||
group: CONFIG.l5r5e.sourceReference[reference]?.type.split(",")[0] ?? "l5r5e.multiselect.sources_categories.others",
|
||||
disabled: !sourcesInThisCompendium.has(reference) || (!game.user.isGM && unavailableSourceForPlayers.includes(reference))
|
||||
disabled: !sourcesInThisCompendium.has(reference) || (!game.user.isGM && unavailableSourceForPlayersSet.has(reference))
|
||||
}));
|
||||
const filterSourcesBox = L5r5eHtmlMultiSelectElement.create({
|
||||
name: "filter-sources",
|
||||
options: selectableSources,
|
||||
options: selectableSourcesArray,
|
||||
localize: true,
|
||||
});
|
||||
header.append(filterSourcesBox.outerHTML);
|
||||
$("l5r5e-multi-select").on("change", applyCompendiumFilter);
|
||||
|
||||
// If gm add an extra button to easily filter the content to see the same stuff as a player
|
||||
if (game.user.isGM && unavailableSourceForPlayers.length > 0) {
|
||||
if (game.user.isGM && unavailableSourceForPlayersSet.size > 0) {
|
||||
const buttonHTML = `<button type="button" class="gm" data-tooltip="${game.i18n.localize('l5r5e.multiselect.player_filter_tooltip')}">`
|
||||
+ game.i18n.localize('l5r5e.multiselect.player_filter_label')
|
||||
+ '</button>'
|
||||
|
||||
const filterPlayerView = allCompendiumReferences
|
||||
.filter((item) => !unavailableSourceForPlayers.includes(item))
|
||||
const filterPlayerViewArray = [...allCompendiumReferencesSet]
|
||||
.filter((item) => !unavailableSourceForPlayersSet.has(item))
|
||||
.filter((item) => sourcesInThisCompendium.has(item));
|
||||
|
||||
$(buttonHTML).appendTo($(header).find("l5r5e-multi-select")).click(function() {
|
||||
header.find("l5r5e-multi-select")[0].value = filterPlayerView;
|
||||
header.find("l5r5e-multi-select")[0].value = filterPlayerViewArray;
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -544,4 +566,11 @@ export default class HooksL5r5e {
|
||||
|
||||
await game.user.assignHotbarMacro(macro, slot);
|
||||
}
|
||||
|
||||
static async createCombatant(document, options, userId) {
|
||||
|
||||
console.log(document, options, userId);
|
||||
|
||||
new game.l5r5e.CombatActions().render(true);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -177,7 +177,7 @@ export class ItemL5r5e extends Item {
|
||||
await game.l5r5e.HelpersL5r5e.refreshItemProperties(this);
|
||||
}
|
||||
const type = this.type.replace("_", "-"); // ex: item_pattern
|
||||
const tpl = await renderTemplate(`${CONFIG.l5r5e.paths.templates}items/${type}/${type}-text.html`, sheetData);
|
||||
const tpl = await foundry.applications.handlebars.renderTemplate(`${CONFIG.l5r5e.paths.templates}items/${type}/${type}-text.html`, sheetData);
|
||||
if (!tpl) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -45,7 +45,7 @@ export class ArmyCohortSheetL5r5e extends ItemSheetL5r5e {
|
||||
const sheetData = await super.getData(options);
|
||||
|
||||
// Editors enrichment
|
||||
sheetData.data.enrichedHtml.abilities = await TextEditor.enrichHTML(sheetData.data.system.abilities, {
|
||||
sheetData.data.enrichedHtml.abilities = await foundry.applications.ux.TextEditor.implementation.enrichHTML(sheetData.data.system.abilities, {
|
||||
async: true,
|
||||
});
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
* Extend the basic ItemSheet with some very simple modifications
|
||||
* @extends {ItemSheet}
|
||||
*/
|
||||
export class BaseItemSheetL5r5e extends ItemSheet {
|
||||
export class BaseItemSheetL5r5e extends foundry.appv1.sheets.ItemSheet {
|
||||
/** @override */
|
||||
static get defaultOptions() {
|
||||
return foundry.utils.mergeObject(super.defaultOptions, {
|
||||
@@ -56,8 +56,8 @@ export class BaseItemSheetL5r5e extends ItemSheet {
|
||||
sheetData.data.system.source_reference.source = game.i18n.localize(label_or_reference);
|
||||
|
||||
// Translate list of available references
|
||||
const all_references = game.settings.get(CONFIG.l5r5e.namespace, "all-compendium-references");
|
||||
sheetData.source_references = all_references.map((reference) => {
|
||||
const all_referencesSet = game.settings.get(CONFIG.l5r5e.namespace, "all-compendium-references");
|
||||
sheetData.source_references = [...all_referencesSet].map((reference) => {
|
||||
const label_or_reference = CONFIG.l5r5e.sourceReference[reference]?.label ?? reference
|
||||
return game.i18n.localize(label_or_reference)
|
||||
})
|
||||
|
||||
@@ -26,7 +26,7 @@ export class ItemSheetL5r5e extends BaseItemSheetL5r5e {
|
||||
|
||||
// Editors enrichment
|
||||
sheetData.data.enrichedHtml = {
|
||||
description: await TextEditor.enrichHTML(sheetData.data.system.description, { async: true }),
|
||||
description: await foundry.applications.ux.TextEditor.implementation.enrichHTML(sheetData.data.system.description, { async: true }),
|
||||
};
|
||||
|
||||
return sheetData;
|
||||
@@ -37,31 +37,26 @@ export class ItemSheetL5r5e extends BaseItemSheetL5r5e {
|
||||
* @private
|
||||
*/
|
||||
async _prepareProperties(sheetData) {
|
||||
sheetData.data.propertiesList = [];
|
||||
sheetData.data.propertiesList = await Promise.all((sheetData.data?.system?.properties || []).map(async (property) => {
|
||||
|
||||
if (Array.isArray(sheetData.data.system.properties)) {
|
||||
const props = [];
|
||||
for (const property of sheetData.data.system.properties) {
|
||||
const gameProp = await game.l5r5e.HelpersL5r5e.getObjectGameOrPack({ id: property.id, type: "Item" });
|
||||
if (gameProp) {
|
||||
sheetData.data.propertiesList.push(gameProp);
|
||||
props.push({ id: gameProp.id, name: gameProp.name });
|
||||
} else {
|
||||
// Item not found
|
||||
console.warn(`L5R5E | IS | Unknown property id[${property.id}], name[${property.name}]`);
|
||||
sheetData.data.propertiesList.push({
|
||||
id: property.id,
|
||||
name: property.name,
|
||||
type: "property",
|
||||
img: "systems/l5r5e/assets/icons/items/property.svg",
|
||||
removed: true,
|
||||
});
|
||||
}
|
||||
const gameProp = await game.l5r5e.HelpersL5r5e.getObjectGameOrPack({ id: property.id, type: "Item" });
|
||||
if (gameProp) {
|
||||
return gameProp;
|
||||
}
|
||||
sheetData.data.system.properties = props;
|
||||
}
|
||||
|
||||
// Item not found
|
||||
console.warn(`L5R5E | IS | Unknown property id[${property.id}], name[${property.name}]`);
|
||||
return {
|
||||
id: property.id,
|
||||
name: property.name,
|
||||
type: "property",
|
||||
img: "systems/l5r5e/assets/icons/items/property.svg",
|
||||
removed: true,
|
||||
};
|
||||
}));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Subscribe to events from the sheet.
|
||||
* @param {jQuery} html HTML content of the sheet.
|
||||
@@ -87,7 +82,7 @@ export class ItemSheetL5r5e extends BaseItemSheetL5r5e {
|
||||
// "this.isEditable" fail for tooltips (undefined "this.document")
|
||||
const isEditable = this.options.editable;
|
||||
return [
|
||||
new DragDrop({
|
||||
new foundry.applications.ux.DragDrop.implementation({
|
||||
dragSelector: ".property",
|
||||
dropSelector: null,
|
||||
permissions: { dragstart: isEditable, drop: isEditable },
|
||||
|
||||
@@ -10,7 +10,7 @@ export class JournalL5r5e extends JournalEntry {
|
||||
const data = (await this.sheet?.getData()) || this;
|
||||
const pageData = data.pages[0];
|
||||
|
||||
const tpl = await renderTemplate(`${CONFIG.l5r5e.paths.templates}journal/journal-text.html`, {
|
||||
const tpl = await foundry.applications.handlebars.renderTemplate(`${CONFIG.l5r5e.paths.templates}journal/journal-text.html`, {
|
||||
data: pageData,
|
||||
});
|
||||
return tpl || null;
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
* Base JournalSheet for L5R5e
|
||||
* @extends {JournalSheet}
|
||||
*/
|
||||
export class BaseJournalSheetL5r5e extends JournalSheet {
|
||||
export class BaseJournalSheetL5r5e extends foundry.appv1.sheets.JournalSheet {
|
||||
/** @override */
|
||||
static get defaultOptions() {
|
||||
return foundry.utils.mergeObject(super.defaultOptions, {
|
||||
|
||||
@@ -5,7 +5,6 @@ import { SocketHandlerL5r5e } from "./socket-handler.js";
|
||||
import { RegisterSettings } from "./settings.js";
|
||||
import { PreloadTemplates } from "./preloadTemplates.js";
|
||||
import { RegisterHandlebars } from "./handlebars.js";
|
||||
import { HelpDialog } from "./help/help-dialog.js";
|
||||
import HooksL5r5e from "./hooks.js";
|
||||
// Actors
|
||||
import { ActorL5r5e } from "./actor.js";
|
||||
@@ -95,7 +94,6 @@ Hooks.once("init", async () => {
|
||||
RollnKeepDialog,
|
||||
GmToolbox,
|
||||
GmMonitor,
|
||||
HelpDialog,
|
||||
storage: new Storage(),
|
||||
sockets: new SocketHandlerL5r5e(),
|
||||
migrations: MigrationL5r5e,
|
||||
@@ -111,107 +109,110 @@ Hooks.once("init", async () => {
|
||||
PreloadTemplates().then(() => {});
|
||||
|
||||
// ***** Register custom sheets *****
|
||||
const fdc = foundry.documents.collections;
|
||||
const fav1s = foundry.appv1.sheets;
|
||||
|
||||
// Actors
|
||||
Actors.unregisterSheet("core", ActorSheet);
|
||||
Actors.registerSheet(L5R5E.namespace, CharacterSheetL5r5e, {
|
||||
fdc.Actors.unregisterSheet("core", fav1s.ActorSheet);
|
||||
fdc.Actors.registerSheet(L5R5E.namespace, CharacterSheetL5r5e, {
|
||||
types: ["character"],
|
||||
label: "TYPES.Actor.character",
|
||||
makeDefault: true,
|
||||
});
|
||||
Actors.registerSheet(L5R5E.namespace, NpcSheetL5r5e, {
|
||||
fdc.Actors.registerSheet(L5R5E.namespace, NpcSheetL5r5e, {
|
||||
types: ["npc"],
|
||||
label: "TYPES.Actor.npc",
|
||||
makeDefault: true,
|
||||
});
|
||||
Actors.registerSheet(L5R5E.namespace, ArmySheetL5r5e, {
|
||||
fdc.Actors.registerSheet(L5R5E.namespace, ArmySheetL5r5e, {
|
||||
types: ["army"],
|
||||
label: "TYPES.Actor.army",
|
||||
makeDefault: true,
|
||||
});
|
||||
|
||||
// Items
|
||||
Items.unregisterSheet("core", ItemSheet);
|
||||
Items.registerSheet(L5R5E.namespace, ItemSheetL5r5e, {
|
||||
fdc.Items.unregisterSheet("core", fav1s.ItemSheet);
|
||||
fdc.Items.registerSheet(L5R5E.namespace, ItemSheetL5r5e, {
|
||||
types: ["item"],
|
||||
label: "TYPES.Item.item",
|
||||
makeDefault: true,
|
||||
});
|
||||
Items.registerSheet(L5R5E.namespace, ArmorSheetL5r5e, {
|
||||
fdc.Items.registerSheet(L5R5E.namespace, ArmorSheetL5r5e, {
|
||||
types: ["armor"],
|
||||
label: "TYPES.Item.armor",
|
||||
makeDefault: true,
|
||||
});
|
||||
Items.registerSheet(L5R5E.namespace, WeaponSheetL5r5e, {
|
||||
fdc.Items.registerSheet(L5R5E.namespace, WeaponSheetL5r5e, {
|
||||
types: ["weapon"],
|
||||
label: "TYPES.Item.weapon",
|
||||
makeDefault: true,
|
||||
});
|
||||
Items.registerSheet(L5R5E.namespace, TechniqueSheetL5r5e, {
|
||||
fdc.Items.registerSheet(L5R5E.namespace, TechniqueSheetL5r5e, {
|
||||
types: ["technique"],
|
||||
label: "TYPES.Item.technique",
|
||||
makeDefault: true,
|
||||
});
|
||||
Items.registerSheet(L5R5E.namespace, PropertySheetL5r5e, {
|
||||
fdc.Items.registerSheet(L5R5E.namespace, PropertySheetL5r5e, {
|
||||
types: ["property"],
|
||||
label: "TYPES.Item.property",
|
||||
makeDefault: true,
|
||||
});
|
||||
Items.registerSheet(L5R5E.namespace, PeculiaritySheetL5r5e, {
|
||||
fdc.Items.registerSheet(L5R5E.namespace, PeculiaritySheetL5r5e, {
|
||||
types: ["peculiarity"],
|
||||
label: "TYPES.Item.peculiarity",
|
||||
makeDefault: true,
|
||||
});
|
||||
Items.registerSheet(L5R5E.namespace, AdvancementSheetL5r5e, {
|
||||
fdc.Items.registerSheet(L5R5E.namespace, AdvancementSheetL5r5e, {
|
||||
types: ["advancement"],
|
||||
label: "TYPES.Item.advancement",
|
||||
makeDefault: true,
|
||||
});
|
||||
Items.registerSheet(L5R5E.namespace, TitleSheetL5r5e, {
|
||||
fdc.Items.registerSheet(L5R5E.namespace, TitleSheetL5r5e, {
|
||||
types: ["title"],
|
||||
label: "TYPES.Item.title",
|
||||
makeDefault: true,
|
||||
});
|
||||
Items.registerSheet(L5R5E.namespace, BondSheetL5r5e, {
|
||||
fdc.Items.registerSheet(L5R5E.namespace, BondSheetL5r5e, {
|
||||
types: ["bond"],
|
||||
label: "TYPES.Item.bond",
|
||||
makeDefault: true,
|
||||
});
|
||||
Items.registerSheet(L5R5E.namespace, SignatureScrollSheetL5r5e, {
|
||||
fdc.Items.registerSheet(L5R5E.namespace, SignatureScrollSheetL5r5e, {
|
||||
types: ["signature_scroll"],
|
||||
label: "TYPES.Item.signature_scroll",
|
||||
makeDefault: true,
|
||||
});
|
||||
Items.registerSheet(L5R5E.namespace, ItemPatternSheetL5r5e, {
|
||||
fdc.Items.registerSheet(L5R5E.namespace, ItemPatternSheetL5r5e, {
|
||||
types: ["item_pattern"],
|
||||
label: "TYPES.Item.item_pattern",
|
||||
makeDefault: true,
|
||||
});
|
||||
Items.registerSheet(L5R5E.namespace, ArmyCohortSheetL5r5e, {
|
||||
fdc.Items.registerSheet(L5R5E.namespace, ArmyCohortSheetL5r5e, {
|
||||
types: ["army_cohort"],
|
||||
label: "TYPES.Item.army_cohort",
|
||||
makeDefault: true,
|
||||
});
|
||||
Items.registerSheet(L5R5E.namespace, ArmyFortificationSheetL5r5e, {
|
||||
fdc.Items.registerSheet(L5R5E.namespace, ArmyFortificationSheetL5r5e, {
|
||||
types: ["army_fortification"],
|
||||
label: "TYPES.Item.army_fortification",
|
||||
makeDefault: true,
|
||||
});
|
||||
|
||||
// Journal
|
||||
Journal.unregisterSheet("core", JournalSheet);
|
||||
Journal.registerSheet(L5R5E.namespace, BaseJournalSheetL5r5e, {
|
||||
fdc.Journal.unregisterSheet("core", fav1s.JournalSheet);
|
||||
fdc.Journal.registerSheet(L5R5E.namespace, BaseJournalSheetL5r5e, {
|
||||
label: "TYPES.Journal.journal",
|
||||
makeDefault: true,
|
||||
});
|
||||
|
||||
// Override enrichHTML for Symbol replacement
|
||||
const oldEnrichHTML = TextEditor.prototype.constructor.enrichHTML;
|
||||
TextEditor.prototype.constructor.enrichHTML = async function (content, options = {}) {
|
||||
const oldEnrichHTML = foundry.applications.ux.TextEditor.implementation.prototype.constructor.enrichHTML;
|
||||
foundry.applications.ux.TextEditor.implementation.prototype.constructor.enrichHTML = async function (content, options = {}) {
|
||||
return HelpersL5r5e.convertSymbols(await oldEnrichHTML.call(this, content, options), true);
|
||||
};
|
||||
|
||||
// Override the default Token _drawBar function to allow fatigue bar reversing.
|
||||
Token.prototype._drawBar = function (number, bar, data) {
|
||||
foundry.canvas.placeables.Token.prototype._drawBar = function (number, bar, data) {
|
||||
const barSettings = game.settings.get(L5R5E.namespace, "token-reverse-token-bars");
|
||||
const reverseBar = barSettings === 'both' || barSettings === data.attribute;
|
||||
|
||||
@@ -251,13 +252,15 @@ Hooks.once("init", async () => {
|
||||
/* ------------------------------------ */
|
||||
Hooks.once("setup", HooksL5r5e.setup);
|
||||
Hooks.once("ready", HooksL5r5e.ready);
|
||||
Hooks.once("init", HooksL5r5e.init);
|
||||
Hooks.once("diceSoNiceReady", (dice3d) => HooksL5r5e.diceSoNiceReady(dice3d));
|
||||
|
||||
/* ------------------------------------ */
|
||||
/* Hooks On */
|
||||
/* ------------------------------------ */
|
||||
Hooks.on("renderSidebarTab", (app, html, data) => HooksL5r5e.renderSidebarTab(app, html, data));
|
||||
Hooks.on("renderChatMessage", (message, html, data) => HooksL5r5e.renderChatMessage(message, html, data));
|
||||
Hooks.on("activateSettings", async (app)=> HooksL5r5e.activateSettings(app));
|
||||
Hooks.on("renderChatMessageHTML", (message, html, data) => HooksL5r5e.renderChatMessage(message, html, data));
|
||||
Hooks.on("renderCombatTracker", (app, html, data) => HooksL5r5e.renderCombatTracker(app, html, data));
|
||||
Hooks.on("renderCompendium", async (app, html, data) => HooksL5r5e.renderCompendium(app, html, data));
|
||||
Hooks.on("diceSoNiceRollStart", (messageId, context) => HooksL5r5e.diceSoNiceRollStart(messageId, context));
|
||||
|
||||
@@ -6,7 +6,7 @@ export class MigrationL5r5e {
|
||||
* Minimum Version needed for migration stuff to trigger
|
||||
* @type {string}
|
||||
*/
|
||||
static NEEDED_VERSION = "1.12.3";
|
||||
static NEEDED_VERSION = "1.13.0";
|
||||
|
||||
/**
|
||||
* Return true if the version need some updates
|
||||
@@ -358,7 +358,21 @@ export class MigrationL5r5e {
|
||||
updateData["content"] = "";
|
||||
}
|
||||
}
|
||||
// ***** End of 1.3.0 *****
|
||||
|
||||
// ***** Start of 1.13.0 *****
|
||||
if (options?.force || MigrationL5r5e.needUpdate("1.13.0")) {
|
||||
// Fix Roll messages
|
||||
if (message.isRoll && message.content !== "") {
|
||||
updateData["content"] = message.content
|
||||
.replace('<div class="l5r5e dice-roll">', '<div class="l5r5e chat dice-roll">')
|
||||
.replace(/<div class="l5r5e item-display dices-l5r">(?!<\/div>)/, '<div class="l5r5e item-display dices-l5r"><div class="l5r5e dice-container">')
|
||||
.replace(/(?!<\/div>)<button class="l5r5e chat-dice-rnk/, '</div><button class="l5r5e chat-dice-rnk')
|
||||
;
|
||||
}
|
||||
}
|
||||
|
||||
// ***** End of 1.13.0 *****
|
||||
return updateData;
|
||||
}
|
||||
}
|
||||
|
||||
153
system/scripts/misc/l5r5e-popup-manager.js
Normal file
@@ -0,0 +1,153 @@
|
||||
/**
|
||||
* Manages tooltips for specified elements, showing asynchronously generated content on hover.
|
||||
* Tooltips are appended to a customizable container element.
|
||||
* Automatically cleans up event handlers and observers when target elements are removed.
|
||||
*/
|
||||
export class L5r5ePopupManager {
|
||||
/** @type {string|jQuery} */
|
||||
#selector = null;
|
||||
|
||||
/** @type {(event: MouseEvent) => Promise<string>} */
|
||||
#callback = null;
|
||||
|
||||
/** @type {jQuery|null} */
|
||||
#elements = null;
|
||||
|
||||
/** @type {MutationObserver|null} */
|
||||
#observer = null;
|
||||
|
||||
/** @type {HTMLElement} */
|
||||
#container = null;
|
||||
|
||||
/**
|
||||
* Increment number to ignore old tooltips if template is too long to load (#62)
|
||||
* @type {number}
|
||||
*/
|
||||
#displayId = 0;
|
||||
|
||||
/**
|
||||
* @param {string|jQuery} selector - Selector or jQuery object for tooltip-bound elements.
|
||||
* @param {(event: MouseEvent) => Promise<string>} callback - Async function returning tooltip HTML content.
|
||||
* @param {HTMLElement|jQuery} [container=document.body] - DOM element or jQuery object to contain the tooltip.
|
||||
*/
|
||||
constructor(selector, callback, container = document.body) {
|
||||
this.#selector = selector;
|
||||
this.#callback = callback;
|
||||
this.#container = container instanceof jQuery ? container[0] : container;
|
||||
|
||||
this.#bindEvents();
|
||||
this.#observeDOM();
|
||||
}
|
||||
|
||||
/**
|
||||
* Bind mouseenter, mousemove, and mouseleave events to target elements.
|
||||
* Creates/removes tooltip elements on hover, and updates position on mouse move.
|
||||
* @private
|
||||
*/
|
||||
#bindEvents() {
|
||||
this.#elements = $(this.#selector);
|
||||
|
||||
this.#elements
|
||||
.on("mouseenter.popup", async (event) => {
|
||||
$(this.#container).find("#l5r5e-tooltip-ct").remove();
|
||||
|
||||
// Memory save
|
||||
if (this.#displayId >= 200) {
|
||||
this.#displayId = 0;
|
||||
}
|
||||
const currentDisplayId = ++this.#displayId;
|
||||
|
||||
// Load the template, can take a while
|
||||
const tpl = await this.#callback(event);
|
||||
|
||||
// Abort if no content or the target element is no longer in the DOM
|
||||
if (!tpl || !document.body.contains(event.currentTarget)) {
|
||||
return;
|
||||
}
|
||||
|
||||
// If mismatched, that tpl is too old, the user already display another tooltip
|
||||
if (this.#displayId !== currentDisplayId) {
|
||||
return;
|
||||
}
|
||||
|
||||
$(this.#container).append(
|
||||
`<div id="l5r5e-tooltip-ct" class="l5r5e-tooltip l5r5e-tooltip-ct">${tpl}</div>`
|
||||
);
|
||||
})
|
||||
.on("mousemove.popup", (event) => {
|
||||
const popup = $(this.#container).find("#l5r5e-tooltip-ct");
|
||||
if (popup.length) {
|
||||
popup.css(this.popupPosition(event, popup));
|
||||
}
|
||||
})
|
||||
.on("mouseleave.popup", () => {
|
||||
$(this.#container).find("#l5r5e-tooltip-ct").remove();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a MutationObserver that watches for removal of tooltip-bound elements
|
||||
* and automatically destroys the manager if none remain.
|
||||
* @private
|
||||
*/
|
||||
#observeDOM() {
|
||||
this.#observer = new MutationObserver(() => {
|
||||
const anyStillPresent = this.#elements?.toArray().some(el => document.body.contains(el));
|
||||
if (!anyStillPresent) {
|
||||
this.destroy();
|
||||
}
|
||||
});
|
||||
|
||||
this.#observer.observe(this.#container, {
|
||||
childList: true,
|
||||
subtree: true
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculates CSS positioning for the tooltip based on mouse event,
|
||||
* constraining it inside the viewport.
|
||||
* @param {MouseEvent} event - The mouse event for position reference.
|
||||
* @param {jQuery} popup - The jQuery object representing the tooltip element.
|
||||
* @returns {{left: string, top: string, visibility: string}} CSS styles for tooltip positioning.
|
||||
*/
|
||||
popupPosition(event, popup) {
|
||||
let left = event.clientX + 60;
|
||||
let top = event.clientY;
|
||||
|
||||
const maxY = window.innerHeight - popup.outerHeight();
|
||||
if (top > maxY) {
|
||||
top = maxY - 10;
|
||||
}
|
||||
|
||||
const maxX = window.innerWidth - popup.outerWidth();
|
||||
if (left > maxX) {
|
||||
left -= popup.outerWidth() + 100;
|
||||
}
|
||||
|
||||
return {
|
||||
left: `${left}px`,
|
||||
top: `${top}px`,
|
||||
visibility: "visible"
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Unbind all events, remove tooltip elements, and disconnect the MutationObserver.
|
||||
* Cleans up all references for proper garbage collection.
|
||||
*/
|
||||
destroy() {
|
||||
if (this.#elements) {
|
||||
this.#elements.off(".popup");
|
||||
}
|
||||
|
||||
$(this.#container).find("#l5r5e-tooltip-ct").remove();
|
||||
|
||||
if (this.#observer) {
|
||||
this.#observer.disconnect();
|
||||
this.#observer = null;
|
||||
}
|
||||
|
||||
this.#elements = null;
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
export const PreloadTemplates = async function () {
|
||||
const tpl = CONFIG.l5r5e.paths.templates;
|
||||
return loadTemplates([
|
||||
return foundry.applications.handlebars.loadTemplates([
|
||||
// Add paths to "systems/l5r5e/templates"
|
||||
// *** Actors : PC ***
|
||||
`${tpl}actors/character/advancement-school.html`,
|
||||
|
||||
@@ -25,6 +25,15 @@ export const RegisterSettings = function () {
|
||||
type: Boolean,
|
||||
default: true,
|
||||
});
|
||||
game.settings.register(CONFIG.l5r5e.namespace, "show-all-status-effects", {
|
||||
name: "SETTINGS.ShowAllStatusEffects.Title",
|
||||
hint: "SETTINGS.ShowAllStatusEffects.Hint",
|
||||
scope: "world",
|
||||
config: true,
|
||||
type: Boolean,
|
||||
default: false,
|
||||
requiresReload: true,
|
||||
});
|
||||
game.settings.register(CONFIG.l5r5e.namespace, "techniques-customs", {
|
||||
name: "SETTINGS.CustomTechniques.Title",
|
||||
hint: "SETTINGS.CustomTechniques.Hint",
|
||||
|
||||
@@ -76,7 +76,7 @@ export class SocketHandlerL5r5e {
|
||||
})();
|
||||
}
|
||||
_onRefreshAppId(payload) {
|
||||
const app = Object.values(ui.windows).find((e) => e.id === payload.appId);
|
||||
const app = game.l5r5e.HelpersL5r5e.getApplication(payload.appId);
|
||||
if (!app || typeof app.refresh !== "function") {
|
||||
return;
|
||||
}
|
||||
@@ -96,7 +96,7 @@ export class SocketHandlerL5r5e {
|
||||
});
|
||||
}
|
||||
_onUpdateMessageIdAndRefresh(payload) {
|
||||
const app = Object.values(ui.windows).find((e) => e.id === payload.appId);
|
||||
const app = game.l5r5e.HelpersL5r5e.getApplication(payload.appId);
|
||||
if (!app || !app.message || typeof app.refresh !== "function") {
|
||||
return;
|
||||
}
|
||||
|
||||
3
system/scripts/types.js
Normal file
@@ -0,0 +1,3 @@
|
||||
/**
|
||||
* @typedef {"afflicted" | "bleeding" | "burning" | "centered" | "compromised" | "dazed" | "disoriented" | "dying" | "emboldened" | "enraged" | "exhausted" | "illness_coughing_illness" | "illness_fire_rash" | "illness_gut_sickness" | "illness_oozing_sore_disease" | "illness_unsteady_illness" | "immobilized" | "incapacitated" | "intoxicated" | "possessed" | "prone" | "silenced" | "unconscious" | "lightly_wounded_fire" | "lightly_wounded_water" | "lightly_wounded_air" | "lightly_wounded_earth" | "lightly_wounded_void" | "severely_wounded_fire" | "severely_wounded_water" | "severely_wounded_air" | "severely_wounded_earth" | "severely_wounded_void"} Condition
|
||||
*/
|
||||
@@ -1,20 +1,24 @@
|
||||
@layer system {
|
||||
/* Global */
|
||||
@import "../scss/colors";
|
||||
@import "../scss/global";
|
||||
@import "../scss/compatibility-modules";
|
||||
@import "../scss/fonts";
|
||||
@import "../scss/cursors";
|
||||
@import "../scss/dices";
|
||||
@import "../scss/ui";
|
||||
@import "../scss/global-appv2.scss";
|
||||
|
||||
.l5r5e {
|
||||
@import "../scss/dices-chat";
|
||||
@import "../scss/sheets";
|
||||
@import "../scss/npc";
|
||||
@import "../scss/army";
|
||||
@import "../scss/nav";
|
||||
@import "../scss/rings";
|
||||
@import "../scss/skills";
|
||||
@import "../scss/items";
|
||||
@import "../scss/twenty-questions";
|
||||
}
|
||||
.l5r5e {
|
||||
@import "../scss/dices";
|
||||
@import "../scss/l5r5e-global";
|
||||
@import "../scss/dices-chat";
|
||||
@import "../scss/sheets";
|
||||
@import "../scss/npc";
|
||||
@import "../scss/army";
|
||||
@import "../scss/nav";
|
||||
@import "../scss/rings";
|
||||
@import "../scss/skills";
|
||||
@import "../scss/items";
|
||||
@import "../scss/twenty-questions";
|
||||
}
|
||||
}
|
||||
@@ -232,7 +232,7 @@
|
||||
&.others {
|
||||
flex-direction: column;
|
||||
|
||||
.editor-content {
|
||||
.editor-container {
|
||||
min-height: 8rem;
|
||||
max-height: 14rem;
|
||||
}
|
||||
|
||||
@@ -1,86 +1,201 @@
|
||||
// Dice in chat
|
||||
.chat-dice {
|
||||
display: inline;
|
||||
position: relative;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
&:after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
right: 0;
|
||||
border-radius: 0.15rem;
|
||||
padding: 0 0.225rem 0 0.15rem;
|
||||
font-size: 0.75em;
|
||||
line-height: 1rem;
|
||||
width: 1em;
|
||||
text-align: center;
|
||||
color: white;
|
||||
background: transparent;
|
||||
}
|
||||
&:last-of-type,
|
||||
&:nth-child(6),
|
||||
&:nth-child(12),
|
||||
&:nth-child(18) {
|
||||
&:after {
|
||||
padding: 0 0.175rem 0 0.15rem;
|
||||
}
|
||||
}
|
||||
&.rerolled {
|
||||
> img {
|
||||
border-bottom: 0 none;
|
||||
}
|
||||
&:after {
|
||||
content: "\f2f9";
|
||||
background: orangered;
|
||||
}
|
||||
}
|
||||
&.chat.dice-roll {
|
||||
|
||||
&.swapped {
|
||||
> img {
|
||||
border-bottom: 0 none;
|
||||
}
|
||||
&:after {
|
||||
content: "\f337";
|
||||
background: fuchsia;
|
||||
}
|
||||
}
|
||||
|
||||
> img {
|
||||
border: 1px solid transparent;
|
||||
height: auto;
|
||||
width: calc(100% / 6 - 0.255rem);
|
||||
margin: auto;
|
||||
}
|
||||
}
|
||||
td {
|
||||
.chat-dice {
|
||||
}
|
||||
}
|
||||
|
||||
.chat-profil {
|
||||
text-align: center;
|
||||
vertical-align: middle;
|
||||
|
||||
.profile-img {
|
||||
margin: 0.25rem 0.25rem 0 0;
|
||||
}
|
||||
|
||||
&-stance {
|
||||
font-size: 2.5rem;
|
||||
line-height: 2.5rem;
|
||||
margin: 0.25rem;
|
||||
text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
&-element {
|
||||
flex-wrap: wrap;
|
||||
flex-grow: 1;
|
||||
|
||||
&-skill {
|
||||
flex-grow: 3;
|
||||
display: inline;
|
||||
position: relative;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
&:after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
right: 0;
|
||||
border-radius: 0.15rem;
|
||||
padding: 0 0.15rem;
|
||||
font-size: 0.65em;
|
||||
line-height: 1rem;
|
||||
//width: 1em;
|
||||
text-align: center;
|
||||
color: white;
|
||||
background: transparent;
|
||||
}
|
||||
&:last-child {
|
||||
flex-grow: 2;
|
||||
&:last-of-type,
|
||||
&:nth-child(6),
|
||||
&:nth-child(12),
|
||||
&:nth-child(18) {
|
||||
&:after {
|
||||
padding: 0 0.175rem 0 0.15rem;
|
||||
}
|
||||
}
|
||||
&.rerolled {
|
||||
> img {
|
||||
border-bottom: 0 none;
|
||||
}
|
||||
&:after {
|
||||
content: "\f2f9";
|
||||
background: orangered;
|
||||
}
|
||||
}
|
||||
|
||||
&.swapped {
|
||||
> img {
|
||||
border-bottom: 0 none;
|
||||
}
|
||||
&:after {
|
||||
content: "\f337";
|
||||
background: fuchsia;
|
||||
}
|
||||
}
|
||||
|
||||
> img {
|
||||
border: 1px solid transparent;
|
||||
height: auto;
|
||||
}
|
||||
}
|
||||
td {
|
||||
.chat-dice {
|
||||
}
|
||||
}
|
||||
|
||||
.chat-profil {
|
||||
text-align: center;
|
||||
vertical-align: middle;
|
||||
|
||||
.profile-img {
|
||||
margin: 0.25rem 0.25rem 0 0;
|
||||
}
|
||||
|
||||
&-stance {
|
||||
font-size: 2.5rem;
|
||||
line-height: 2.5rem;
|
||||
margin: 0.25rem;
|
||||
text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
&-element {
|
||||
flex-wrap: wrap;
|
||||
flex-grow: 1;
|
||||
|
||||
&-skill {
|
||||
flex-grow: 3;
|
||||
}
|
||||
&:last-child {
|
||||
flex-grow: 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
.dice-formula,
|
||||
.dice-total {
|
||||
background: rgba(255, 255, 255, 0.1);
|
||||
border: rgba(255, 255, 255, 0.75);
|
||||
text-align: center;
|
||||
margin: 0.5rem 0;
|
||||
padding: 0.25rem 0.5rem 0.25rem 0.25rem;
|
||||
&-rnk {
|
||||
line-height: 2rem;
|
||||
i {
|
||||
margin-left: 0.5rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
button {
|
||||
justify-self: center;
|
||||
&.chat-dice-rnk {
|
||||
cursor: url("../assets/cursors/pointer.webp"), pointer;
|
||||
color: $white;
|
||||
background: linear-gradient(
|
||||
$l5r5e-linear-gradient-third,
|
||||
$l5r5e-linear-gradient-third-dark,
|
||||
$l5r5e-linear-gradient-third
|
||||
);
|
||||
background-origin: padding-box;
|
||||
border-image: url("../assets/ui/macro-button.webp") 10 repeat;
|
||||
border-image-width: 0.5rem;
|
||||
border-image-outset: 0px;
|
||||
margin: 0.5rem 0 0;
|
||||
&:hover {
|
||||
background: linear-gradient(
|
||||
$l5r5e-linear-gradient-first-dark,
|
||||
$l5r5e-linear-gradient-first,
|
||||
$l5r5e-linear-gradient-first-dark
|
||||
);
|
||||
}
|
||||
}
|
||||
&.chat-dice-rnk-ended {
|
||||
background: linear-gradient(
|
||||
$l5r5e-linear-gradient-second,
|
||||
$l5r5e-linear-gradient-second-dark,
|
||||
$l5r5e-linear-gradient-second
|
||||
);
|
||||
}
|
||||
}
|
||||
.dice-result-rnk {
|
||||
background: rgba(0, 0, 255, 0.1);
|
||||
border: 1px solid rgba(55, 55, 155, 0.75);
|
||||
padding: 0.25rem;
|
||||
color: rgba(55, 55, 155, 0.75);
|
||||
text-align: center;
|
||||
font-weight: bold;
|
||||
text-shadow: 0 0 0 $black;
|
||||
&.success {
|
||||
background: rgba(0, 255, 0, 0.1);
|
||||
border-color: rgba(55, 155, 55, 0.75);
|
||||
color: rgba(55, 155, 55, 0.75);
|
||||
i.i_success {
|
||||
font-size: 1rem;
|
||||
}
|
||||
}
|
||||
&.unknown {
|
||||
background: rgba(121, 121, 121, 0.1);
|
||||
border-color: rgba(124, 124, 124, 0.75);
|
||||
color: rgba(91, 91, 91, 0.75);
|
||||
}
|
||||
&.fail {
|
||||
background: rgba(255, 0, 0, 0.1);
|
||||
border-color: rgba(155, 55, 55, 0.75);
|
||||
color: rgba(155, 55, 55, 0.75);
|
||||
}
|
||||
}
|
||||
.target,
|
||||
.item-infos {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
flex: 0 0 100%;
|
||||
margin: 0.5rem 0;
|
||||
padding: 0.25rem 0.5rem 0.25rem 0.25rem;
|
||||
background: rgba(255, 255, 255, 0.1);
|
||||
border: solid 1px rgba(100, 0, 0, 0.75);
|
||||
border-radius: 3px;
|
||||
.profile {
|
||||
flex: 1;
|
||||
margin: 0.25rem 0.25rem 0 0;
|
||||
position: relative;
|
||||
.profile-img {
|
||||
position: relative;
|
||||
border: none;
|
||||
filter: drop-shadow(0 0 1px rgba(0, 0, 0, 0.66));
|
||||
}
|
||||
}
|
||||
.name {
|
||||
flex: 6;
|
||||
font-family: "BrushtipTexe", sans-serif;
|
||||
}
|
||||
.content-link {
|
||||
background: unset;
|
||||
border: unset;
|
||||
i {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
.item-infos {
|
||||
border: solid 1px rgba(0, 78, 100, 0.75);
|
||||
i {
|
||||
font-size: var(--font-size-12);
|
||||
}
|
||||
}
|
||||
|
||||
.dice-container {
|
||||
display: flex;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,115 +1,4 @@
|
||||
// -- Dices.scss
|
||||
.dice-roll {
|
||||
.dice-formula,
|
||||
.dice-total {
|
||||
background: rgba(255, 255, 255, 0.1);
|
||||
border: rgba(255, 255, 255, 0.75);
|
||||
text-align: center;
|
||||
margin: 0.5rem 0;
|
||||
padding: 0.25rem 0.5rem 0.25rem 0.25rem;
|
||||
&-rnk {
|
||||
line-height: 2rem;
|
||||
i {
|
||||
margin-left: 0.5rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
button {
|
||||
&.chat-dice-rnk {
|
||||
cursor: url("../assets/cursors/pointer.webp"), pointer;
|
||||
color: $white;
|
||||
background: linear-gradient(
|
||||
$l5r5e-linear-gradient-third,
|
||||
$l5r5e-linear-gradient-third-dark,
|
||||
$l5r5e-linear-gradient-third
|
||||
);
|
||||
background-origin: padding-box;
|
||||
border-image: url("../assets/ui/macro-button.webp") 10 repeat;
|
||||
border-image-width: 0.5rem;
|
||||
border-image-outset: 0px;
|
||||
margin: 0.5rem 0 0;
|
||||
&:hover {
|
||||
background: linear-gradient(
|
||||
$l5r5e-linear-gradient-first-dark,
|
||||
$l5r5e-linear-gradient-first,
|
||||
$l5r5e-linear-gradient-first-dark
|
||||
);
|
||||
}
|
||||
}
|
||||
&.chat-dice-rnk-ended {
|
||||
background: linear-gradient(
|
||||
$l5r5e-linear-gradient-second,
|
||||
$l5r5e-linear-gradient-second-dark,
|
||||
$l5r5e-linear-gradient-second
|
||||
);
|
||||
}
|
||||
}
|
||||
.dice-result-rnk {
|
||||
background: rgba(0, 0, 255, 0.1);
|
||||
border: 1px solid rgba(55, 55, 155, 0.75);
|
||||
padding: 0.25rem;
|
||||
color: rgba(55, 55, 155, 0.75);
|
||||
text-align: center;
|
||||
font-weight: bold;
|
||||
text-shadow: 0 0 0 $black;
|
||||
&.success {
|
||||
background: rgba(0, 255, 0, 0.1);
|
||||
border-color: rgba(55, 155, 55, 0.75);
|
||||
color: rgba(55, 155, 55, 0.75);
|
||||
i.i_success {
|
||||
font-size: 1rem;
|
||||
}
|
||||
}
|
||||
&.unknown {
|
||||
background: rgba(121, 121, 121, 0.1);
|
||||
border-color: rgba(124, 124, 124, 0.75);
|
||||
color: rgba(91, 91, 91, 0.75);
|
||||
}
|
||||
&.fail {
|
||||
background: rgba(255, 0, 0, 0.1);
|
||||
border-color: rgba(155, 55, 55, 0.75);
|
||||
color: rgba(155, 55, 55, 0.75);
|
||||
}
|
||||
}
|
||||
.target,
|
||||
.item-infos {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
flex: 0 0 100%;
|
||||
margin: 0.5rem 0;
|
||||
padding: 0.25rem 0.5rem 0.25rem 0.25rem;
|
||||
background: rgba(255, 255, 255, 0.1);
|
||||
border: solid 1px rgba(100, 0, 0, 0.75);
|
||||
border-radius: 3px;
|
||||
.profile {
|
||||
flex: 1;
|
||||
margin: 0.25rem 0.25rem 0 0;
|
||||
position: relative;
|
||||
.profile-img {
|
||||
position: relative;
|
||||
border: none;
|
||||
filter: drop-shadow(0 0 1px rgba(0, 0, 0, 0.66));
|
||||
}
|
||||
}
|
||||
.name {
|
||||
flex: 6;
|
||||
font-family: "BrushtipTexe", sans-serif;
|
||||
}
|
||||
.content-link {
|
||||
background: unset;
|
||||
border: unset;
|
||||
i {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
.item-infos {
|
||||
border: solid 1px rgba(0, 78, 100, 0.75);
|
||||
i {
|
||||
font-size: var(--font-size-12);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// If DicePicker add a pointer
|
||||
.dice-picker {
|
||||
@@ -202,7 +91,13 @@
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.dice-container.assistance {
|
||||
display: flex;
|
||||
align-items: anchor-center;
|
||||
}
|
||||
|
||||
.dice-container {
|
||||
display: inline-block;
|
||||
position: relative;
|
||||
text-align: center;
|
||||
|
||||
@@ -210,6 +105,16 @@
|
||||
height: 40px;
|
||||
width: 40px;
|
||||
}
|
||||
&.dice-value{
|
||||
&.input-dice {
|
||||
width: 20px;
|
||||
color: #0f0f0e;
|
||||
background: none;
|
||||
border: none;
|
||||
font-size: large;
|
||||
padding: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.dice-value {
|
||||
@@ -218,22 +123,25 @@
|
||||
left: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
}
|
||||
|
||||
.input-dice {
|
||||
width: 20px;
|
||||
input[name="ring.value"][type="text"] {
|
||||
color: #f0f0e0;
|
||||
border: unset;
|
||||
background: unset;
|
||||
}
|
||||
input[name="skill.value"][type="text"] {
|
||||
color: #0f0f0e;
|
||||
background: none;
|
||||
border: none;
|
||||
font-size: large;
|
||||
padding: 0;
|
||||
|
||||
&-ring {
|
||||
color: #f0f0e0;
|
||||
}
|
||||
|
||||
&-skill {
|
||||
color: #0f0f0e;
|
||||
}
|
||||
border: unset;
|
||||
background: unset;
|
||||
}
|
||||
input[name="difficulty.value"][type="text"] {
|
||||
color: #0f0f0e;
|
||||
border: unset;
|
||||
background: unset;
|
||||
}
|
||||
input[name="skill.assistance"][type="text"] {
|
||||
color: #0f0f0e;
|
||||
border: unset;
|
||||
background: unset;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -368,7 +276,7 @@
|
||||
padding: 0 0.15rem;
|
||||
font-size: 0.65rem;
|
||||
line-height: 1rem;
|
||||
width: 0.65rem;
|
||||
width: 1rem;
|
||||
text-align: center;
|
||||
color: white;
|
||||
background: gray;
|
||||
|
||||
102
system/styles/scss/global-appv2.scss
Normal file
@@ -0,0 +1,102 @@
|
||||
.application {
|
||||
color: var(--color-text-dark-primary);
|
||||
|
||||
.scrollable {
|
||||
--scroll-margin: 0;
|
||||
}
|
||||
|
||||
.window-header {
|
||||
background: linear-gradient(
|
||||
$l5r5e-linear-gradient-second,
|
||||
$l5r5e-linear-gradient-second-dark,
|
||||
$l5r5e-linear-gradient-second
|
||||
);
|
||||
.window-title {
|
||||
font-family: $font-secondary;
|
||||
font-size: 1.25rem;
|
||||
}
|
||||
}
|
||||
|
||||
.window-content {
|
||||
padding: 0.25rem;
|
||||
}
|
||||
}
|
||||
|
||||
// More specified stuff down here as to not make it too hard to read the overridden defaults
|
||||
.application {
|
||||
.window-content {
|
||||
table {
|
||||
background: transparent;
|
||||
border: 1px solid $l5r5e-title;
|
||||
thead {
|
||||
background: $l5r5e-title;
|
||||
color: $l5r5e-label;
|
||||
text-shadow: none;
|
||||
border-bottom: $l5r5e-title;
|
||||
}
|
||||
tbody {
|
||||
}
|
||||
tr {
|
||||
&:nth-child(odd) {
|
||||
background: $l5r5e-odd;
|
||||
}
|
||||
&:nth-child(even) {
|
||||
background: $l5r5e-even;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#sidebar-tabs > menu {
|
||||
gap: 4px; // halve the distance between menu icons
|
||||
}
|
||||
|
||||
#sidebar-content.expanded {
|
||||
background: url("../assets/ui/bgSidebar.webp") no-repeat;
|
||||
border-image: url("../assets/ui/macro-button.webp") 10 repeat;
|
||||
border-style: solid;
|
||||
border-image-width: 0.5rem;
|
||||
border-image-outset: 0px;
|
||||
margin-top: 2px;
|
||||
margin-right: 2px;
|
||||
height: calc(100% - 10px); // use height calculation to add margin at bottom
|
||||
|
||||
.sidebar-tab,.tab {
|
||||
margin: 3px; // center content in sidebar
|
||||
border-radius: 5px; // round of the inside content
|
||||
}
|
||||
|
||||
#chat {
|
||||
margin: unset;
|
||||
padding-right: 4px; // scrollbar should be inside the container
|
||||
.chat-scroll {
|
||||
direction: unset; // Scrollbar on right
|
||||
scrollbar-color: var(--color-light-4) var(--color-dark-3);
|
||||
scrollbar-width: thin;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// hotbar
|
||||
#hotbar {
|
||||
//margin: 0;
|
||||
#action-bar {
|
||||
//flex: 0 0 100%;
|
||||
.slot {
|
||||
border-image: url("../assets/ui/macro-button.webp");
|
||||
border-image-slice: 8 fill;
|
||||
border-image-width: 0.25rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#menu.active {
|
||||
transition: max-height 150ms ease-in;
|
||||
}
|
||||
|
||||
#menu {
|
||||
// Foundry listens to transitionend and then close the menu so need something here.
|
||||
// otherwise using ESC will result in a long wait and missed trigger events
|
||||
transition: max-height 10ms ease-out;
|
||||
}
|
||||
@@ -19,7 +19,6 @@ body {
|
||||
.window-content {
|
||||
z-index: 1;
|
||||
position: relative;
|
||||
background: rgb(255, 250, 230) url("../assets/imgs/bg-l5r.webp") no-repeat;
|
||||
background-size: cover;
|
||||
scrollbar-width: thin;
|
||||
padding: 0;
|
||||
@@ -123,11 +122,6 @@ body {
|
||||
}
|
||||
|
||||
/* Focus, Active */
|
||||
* {
|
||||
transition-property: background, color, border-color, text-shadow, box-shadow;
|
||||
transition-duration: 0.5s;
|
||||
transition-timing-function: ease;
|
||||
}
|
||||
input[type="text"]:focus,
|
||||
input[type="number"]:focus,
|
||||
input[type="password"]:focus,
|
||||
@@ -158,20 +152,6 @@ button:focus {
|
||||
box-shadow: 0 0 10px $red;
|
||||
}
|
||||
|
||||
option {
|
||||
font-size: 1rem;
|
||||
line-height: 1.5rem;
|
||||
padding: 0.25rem;
|
||||
color: $black-light;
|
||||
}
|
||||
|
||||
/* lists */
|
||||
ul,
|
||||
li {
|
||||
list-style-type: none;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
.item-list {
|
||||
> li {
|
||||
padding: 0.25rem;
|
||||
@@ -205,51 +185,13 @@ fieldset {
|
||||
}
|
||||
}
|
||||
|
||||
// inputs
|
||||
input[type="text"],
|
||||
input[type="number"],
|
||||
input[type="password"],
|
||||
input[type="date"],
|
||||
input[type="time"],
|
||||
textarea {
|
||||
padding: 0.25rem;
|
||||
background: $l5r5e-white;
|
||||
border: 1px solid $l5r5e-title;
|
||||
color: $l5r5e-bold;
|
||||
resize: vertical;
|
||||
border-radius: 0;
|
||||
&[disabled] {
|
||||
background: $l5r5e-white-light;
|
||||
}
|
||||
}
|
||||
input[type="number"] {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
// Editors
|
||||
.editor,
|
||||
.editor-content {
|
||||
.editor-container {
|
||||
flex: 1;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
// Elements Colors
|
||||
.earth {
|
||||
color: $l5r5e-earth;
|
||||
}
|
||||
.air {
|
||||
color: $l5r5e-air;
|
||||
}
|
||||
.water {
|
||||
color: $l5r5e-water;
|
||||
}
|
||||
.fire {
|
||||
color: $l5r5e-fire;
|
||||
}
|
||||
.void {
|
||||
color: $l5r5e-void;
|
||||
}
|
||||
|
||||
table {
|
||||
background: transparent;
|
||||
border: 1px solid $l5r5e-title;
|
||||
@@ -284,7 +226,7 @@ sup {
|
||||
}
|
||||
}
|
||||
|
||||
.editor-content,
|
||||
.editor-container,
|
||||
.item-description {
|
||||
ul {
|
||||
margin: 0.5rem 0;
|
||||
@@ -308,7 +250,6 @@ sup {
|
||||
}
|
||||
&-icon {
|
||||
font-weight: 900;
|
||||
font-family: "Font Awesome 5 Free";
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
display: inline-block;
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
flex: 0 0 32px;
|
||||
padding-right: 0.25rem;
|
||||
img {
|
||||
border: 1px solid rgba(0, 0, 0, 0.1);
|
||||
border: none;
|
||||
}
|
||||
}
|
||||
.item-name {
|
||||
@@ -19,6 +19,7 @@
|
||||
font-size: 1rem;
|
||||
line-height: 1rem;
|
||||
color: $l5r5e-bold;
|
||||
align-content: center;
|
||||
}
|
||||
.removed {
|
||||
text-decoration-line: line-through;
|
||||
@@ -454,7 +455,7 @@
|
||||
.flx100 {
|
||||
flex: 0 0 calc(100% - 0.5rem);
|
||||
}
|
||||
.editor-content {
|
||||
.editor-container {
|
||||
min-height: 8rem;
|
||||
max-height: 14rem;
|
||||
}
|
||||
|
||||
109
system/styles/scss/l5r5e-global.scss
Normal file
@@ -0,0 +1,109 @@
|
||||
|
||||
/* lists */
|
||||
ul,
|
||||
li {
|
||||
list-style-type: none;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
// Elements Colors
|
||||
.earth {
|
||||
color: $l5r5e-earth;
|
||||
}
|
||||
.air {
|
||||
color: $l5r5e-air;
|
||||
}
|
||||
.water {
|
||||
color: $l5r5e-water;
|
||||
}
|
||||
.fire {
|
||||
color: $l5r5e-fire;
|
||||
}
|
||||
.void {
|
||||
color: $l5r5e-void;
|
||||
}
|
||||
|
||||
// inputs
|
||||
input[type="text"],
|
||||
input[type="number"],
|
||||
input[type="password"],
|
||||
input[type="date"],
|
||||
input[type="time"],
|
||||
textarea {
|
||||
padding: 0.25rem;
|
||||
background: $l5r5e-white;
|
||||
border: 1px solid $l5r5e-title;
|
||||
color: $l5r5e-black;
|
||||
resize: vertical;
|
||||
border-radius: 0;
|
||||
box-shadow: none;
|
||||
&[disabled] {
|
||||
background: $l5r5e-white-light;
|
||||
}
|
||||
}
|
||||
input[type="number"] {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
&.system-badge {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
gap: .5rem;
|
||||
padding: .25rem;
|
||||
|
||||
> img {
|
||||
height: 128px;
|
||||
border: none;
|
||||
object-fit: contain;
|
||||
}
|
||||
|
||||
.system-info {
|
||||
position: relative;
|
||||
font-size: var(--font-size-16);
|
||||
i {
|
||||
padding-inline-start: 2px;
|
||||
font-size: var(--font-size-12);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&.sidebar-info {
|
||||
margin-bottom: -.5rem;
|
||||
|
||||
.system-badge { margin-top: .5rem; }
|
||||
|
||||
.notification-pip {
|
||||
color: var(--color-text-accent);
|
||||
font-size: var(--font-size-12);
|
||||
top: 4px;
|
||||
right: -14px;
|
||||
}
|
||||
|
||||
ul.unlist {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
padding-left: 0;
|
||||
list-style: none;
|
||||
clip-path: inset(0 0 0 2ch); // remove separator if on new line
|
||||
}
|
||||
ul.links {
|
||||
gap: 0;
|
||||
margin-top: 6px;
|
||||
margin-left: 10%; // just to center the link list a little
|
||||
|
||||
li {
|
||||
padding-left: 1ch;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
li::before {
|
||||
content: "•";
|
||||
display: inline-block;
|
||||
margin-right: 1ch;
|
||||
width: 1ch;
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -67,13 +67,21 @@
|
||||
border-radius: 4px;
|
||||
background-color: rgba(0, 0, 0, 0.4);
|
||||
padding: 3px;
|
||||
display: flex;
|
||||
}
|
||||
.effect-delete {
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
background-repeat: no-repeat;
|
||||
background-size: contain;
|
||||
text-align: end;
|
||||
cursor: url("../assets/cursors/pointer.webp"), pointer;
|
||||
}
|
||||
.effect-icon {
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
background-repeat: no-repeat;
|
||||
background-size: contain;
|
||||
float: left;
|
||||
}
|
||||
.effect-name {
|
||||
vertical-align: top;
|
||||
@@ -81,7 +89,6 @@
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
color: $white;
|
||||
float: right;
|
||||
margin-left: 4px;
|
||||
font-size: 14px;
|
||||
line-height: 16px;
|
||||
@@ -101,8 +108,8 @@
|
||||
}
|
||||
|
||||
.sheet-header {
|
||||
flex: 0 0 100%;
|
||||
align-items: flex-start;
|
||||
flex-wrap: wrap;
|
||||
input {
|
||||
flex: 0 0 3rem;
|
||||
font-size: 1.5rem;
|
||||
@@ -230,12 +237,8 @@
|
||||
}
|
||||
}
|
||||
.identity-content {
|
||||
flex: 0 0 100%;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
margin: 0;
|
||||
padding-top: 0.25rem;
|
||||
padding-left: 0.5rem;
|
||||
li {
|
||||
flex: 33%;
|
||||
&:nth-child(1),
|
||||
@@ -524,17 +527,6 @@
|
||||
}
|
||||
.attribute-label {
|
||||
position: relative;
|
||||
&:before {
|
||||
z-index: -1;
|
||||
content: "";
|
||||
position: absolute;
|
||||
height: calc(100% - 0.85rem);
|
||||
width: 3.1rem;
|
||||
border: 1px solid $l5r5e-title;
|
||||
border-radius: 0;
|
||||
top: 0.15rem;
|
||||
left: 0.15rem;
|
||||
}
|
||||
}
|
||||
.identity-content {
|
||||
.attribute-label {
|
||||
@@ -633,19 +625,19 @@
|
||||
}
|
||||
}
|
||||
.narrative-fluff {
|
||||
flex: 1;
|
||||
flex: 0 0 50%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
||||
.narrative-description {
|
||||
max-height: 13rem;
|
||||
font-size: 0.85rem;
|
||||
flex: 1;
|
||||
}
|
||||
.narrative-description,
|
||||
.narrative-note {
|
||||
flex: 1;
|
||||
font-size: 0.85rem;
|
||||
}
|
||||
.editor-content {
|
||||
min-height: 10rem;
|
||||
max-height: 24rem;
|
||||
|
||||
.editor-container {
|
||||
min-height: 18rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
.techniques-wrapper {
|
||||
@@ -769,10 +761,12 @@
|
||||
}
|
||||
|
||||
table {
|
||||
border: none;
|
||||
font-size: 0.85rem;
|
||||
color: $black-light;
|
||||
text-align: left;
|
||||
thead {
|
||||
border: none;
|
||||
font-family: $font-secondary;
|
||||
font-weight: normal;
|
||||
th {
|
||||
@@ -794,6 +788,7 @@
|
||||
}
|
||||
}
|
||||
tbody {
|
||||
border: none;
|
||||
.curriculum {
|
||||
flex: 0 0 2rem;
|
||||
}
|
||||
@@ -831,8 +826,13 @@
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
border: none;
|
||||
display: inline;
|
||||
}
|
||||
}
|
||||
tfoot {
|
||||
border: none;
|
||||
text-align-last: center;
|
||||
}
|
||||
}
|
||||
|
||||
.inventory {
|
||||
|
||||
@@ -21,442 +21,11 @@ button {
|
||||
}
|
||||
}
|
||||
|
||||
// sidebar
|
||||
#sidebar {
|
||||
padding: 0.5rem 0.25rem 0.5rem 0.5rem;
|
||||
background-position: top;
|
||||
background-size: 100%;
|
||||
background: url("../assets/ui/bgSidebar.webp") no-repeat;
|
||||
border: 1px solid rgb(195, 165, 130);
|
||||
border-radius: 0;
|
||||
overflow: initial;
|
||||
height: calc(100% - 1.1rem);
|
||||
top: 0.2rem;
|
||||
min-width: 20rem;
|
||||
letter-spacing: 0.1rem;
|
||||
position: relative;
|
||||
margin-right: 0.5rem;
|
||||
&:before {
|
||||
z-index: -1;
|
||||
content: "";
|
||||
position: absolute;
|
||||
height: calc(100% + 0.6rem);
|
||||
width: 100%;
|
||||
border: 1px solid rgb(195, 165, 130);
|
||||
border-radius: 0;
|
||||
top: -0.35rem;
|
||||
left: 0.25rem;
|
||||
}
|
||||
#sidebar-tabs {
|
||||
flex: 0 0 2rem;
|
||||
box-sizing: border-box;
|
||||
margin: 0 0 0.25rem;
|
||||
border-bottom: 1px solid rgba(195, 165, 130, 0.5);
|
||||
box-shadow: none;
|
||||
display: flex;
|
||||
i {
|
||||
flex: 1;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-repeat: no-repeat;
|
||||
background-position: center;
|
||||
background-size: 100%;
|
||||
border-radius: 100%;
|
||||
|
||||
// v10 FA6+ color need to be set
|
||||
&.fa-swords,
|
||||
&.fa-user,
|
||||
&.fa-cards {
|
||||
color: black;
|
||||
}
|
||||
|
||||
&.fa-comments {
|
||||
background-image: url("../assets/ui/sidebar/chat.svg");
|
||||
&:before {
|
||||
content: "";
|
||||
}
|
||||
}
|
||||
&.fa-fist-raised {
|
||||
background-image: url("../assets/ui/sidebar/combat-tracker.svg");
|
||||
background-size: 85%;
|
||||
&:before {
|
||||
content: "";
|
||||
}
|
||||
}
|
||||
&.fa-map {
|
||||
background-image: url("../assets/ui/sidebar/scenes.svg");
|
||||
background-size: 80%;
|
||||
&:before {
|
||||
content: "";
|
||||
}
|
||||
}
|
||||
&.fa-users {
|
||||
background-image: url("../assets/ui/sidebar/actors.svg");
|
||||
background-size: 90%;
|
||||
&:before {
|
||||
content: "";
|
||||
}
|
||||
}
|
||||
&.fa-suitcase {
|
||||
background-image: url("../assets/ui/sidebar/object.svg");
|
||||
&:before {
|
||||
content: "";
|
||||
}
|
||||
}
|
||||
&.fa-book-open {
|
||||
background-image: url("../assets/ui/sidebar/journal.svg");
|
||||
&:before {
|
||||
content: "";
|
||||
}
|
||||
}
|
||||
&.fa-th-list {
|
||||
background-image: url("../assets/ui/sidebar/rolltable.svg");
|
||||
background-size: 85%;
|
||||
&:before {
|
||||
content: "";
|
||||
}
|
||||
}
|
||||
&.fa-id-badge {
|
||||
background-size: 85%;
|
||||
color: black;
|
||||
padding-left: 2px;
|
||||
&:before {
|
||||
content: "\f2c1";
|
||||
}
|
||||
}
|
||||
&.fa-music {
|
||||
background-image: url("../assets/ui/sidebar/playlist.svg");
|
||||
background-size: 80%;
|
||||
&:before {
|
||||
content: "";
|
||||
}
|
||||
}
|
||||
&.fa-atlas {
|
||||
background-image: url("../assets/ui/sidebar/compendium.svg");
|
||||
&:before {
|
||||
content: "";
|
||||
}
|
||||
}
|
||||
&.fa-cogs {
|
||||
background-image: url("../assets/ui/sidebar/settings.svg");
|
||||
background-size: 85%;
|
||||
&:before {
|
||||
content: "";
|
||||
}
|
||||
}
|
||||
}
|
||||
> .item {
|
||||
flex: 0 0 1.5rem;
|
||||
width: 1.5rem;
|
||||
height: 1.5rem;
|
||||
line-height: 1.5rem;
|
||||
margin: 0.1rem;
|
||||
border-radius: 100%;
|
||||
background: $l5r5e-white;
|
||||
&.active,
|
||||
&:hover {
|
||||
background: $white;
|
||||
border: 1px solid $l5r5e-border-sidebar;
|
||||
box-shadow: 0 0 10px $red;
|
||||
}
|
||||
}
|
||||
.collapse {
|
||||
position: relative;
|
||||
flex: 0 0 0.85rem;
|
||||
line-height: 1.75rem;
|
||||
color: rgb(195, 165, 130);
|
||||
text-align: center;
|
||||
i {
|
||||
background-color: transparent;
|
||||
}
|
||||
}
|
||||
}
|
||||
&.collapsed {
|
||||
min-width: 0;
|
||||
width: 3rem !important;
|
||||
|
||||
#sidebar-tabs {
|
||||
> .item {
|
||||
&.active {
|
||||
border: 1px solid $l5r5e-border-sidebar;
|
||||
box-shadow: 0 0 10px $l5r5e-white;
|
||||
border-radius: 100%;
|
||||
}
|
||||
}
|
||||
.collapse {
|
||||
flex: 0 0 1.5rem;
|
||||
margin: 0.1rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
.sidebar-tab {
|
||||
.chat-control-icon {
|
||||
cursor: url("../assets/cursors/pointer.webp"), pointer;
|
||||
}
|
||||
.action-buttons button {
|
||||
cursor: default;
|
||||
color: $white;
|
||||
background: linear-gradient(
|
||||
$l5r5e-linear-gradient-third,
|
||||
$l5r5e-linear-gradient-third-dark,
|
||||
$l5r5e-linear-gradient-third
|
||||
);
|
||||
background-origin: padding-box;
|
||||
border-image: url("../assets/ui/macro-button.webp") 10 repeat;
|
||||
border-image-width: 0.5rem;
|
||||
border-image-outset: 0px;
|
||||
&:hover {
|
||||
background: linear-gradient(
|
||||
$l5r5e-linear-gradient-first-dark,
|
||||
$l5r5e-linear-gradient-first,
|
||||
$l5r5e-linear-gradient-first-dark
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
// Settings
|
||||
#settings button {
|
||||
cursor: default;
|
||||
color: $white;
|
||||
background: linear-gradient(
|
||||
$l5r5e-linear-gradient-third,
|
||||
$l5r5e-linear-gradient-third-dark,
|
||||
$l5r5e-linear-gradient-third
|
||||
);
|
||||
background-origin: padding-box;
|
||||
border-image: url("../assets/ui/macro-button.webp") 10 repeat;
|
||||
border-image-width: 0.5rem;
|
||||
border-image-outset: 0px;
|
||||
&:hover {
|
||||
background: linear-gradient(
|
||||
$l5r5e-linear-gradient-first-dark,
|
||||
$l5r5e-linear-gradient-first,
|
||||
$l5r5e-linear-gradient-first-dark
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// Chat
|
||||
#chat-form textarea {
|
||||
color: $black;
|
||||
}
|
||||
#chat-form textarea,
|
||||
.chat-message,
|
||||
.blind,
|
||||
.whisper,
|
||||
#chat-controls .roll-type-select,
|
||||
.header-search input {
|
||||
background: transparent url("../assets/ui/chat-texture.webp") repeat-y;
|
||||
&:focus {
|
||||
background: #f0f0e0 url("../assets/ui/chat-texture.webp") repeat-y;
|
||||
}
|
||||
}
|
||||
.header-search input[name="search"] {
|
||||
background-color: $l5r5e-chat-color;
|
||||
color: $l5r5e-black;
|
||||
&:focus {
|
||||
background-color: $l5r5e-chat-color-roll;
|
||||
}
|
||||
}
|
||||
|
||||
// Chat-Message
|
||||
.chat-message {
|
||||
.message-header {
|
||||
line-height: 2rem;
|
||||
border-bottom: 1px solid rgba(0, 0, 0, 0.1);
|
||||
margin-bottom: 0.25rem;
|
||||
border-radius: 0;
|
||||
}
|
||||
}
|
||||
|
||||
#chat-log {
|
||||
margin: 0 0 0.5rem;
|
||||
font-size: 1rem;
|
||||
.message.whisper,
|
||||
.message.blind,
|
||||
.message.roll {
|
||||
position: relative;
|
||||
.message-header {
|
||||
.message-metadata:before {
|
||||
position: absolute;
|
||||
top: -0.5rem;
|
||||
right: 0.25rem;
|
||||
font-size: 0.5rem;
|
||||
color: $l5r5e-red;
|
||||
height: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
.message.whisper {
|
||||
font-style: italic;
|
||||
.message-header {
|
||||
.message-metadata:before {
|
||||
content: "(Private)";
|
||||
}
|
||||
}
|
||||
&.roll {
|
||||
.message-header {
|
||||
.message-metadata:before {
|
||||
content: "(Private Roll)";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.message.blind {
|
||||
font-style: italic;
|
||||
.message-header {
|
||||
.message-metadata:before {
|
||||
content: "(Blind)";
|
||||
}
|
||||
}
|
||||
&.roll {
|
||||
.message-header {
|
||||
.message-metadata:before {
|
||||
content: "(Blind Roll)";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.message.roll {
|
||||
.message-header {
|
||||
.message-metadata:before {
|
||||
content: "(Roll)";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.message-sender {
|
||||
color: $l5r5e-red;
|
||||
text-shadow: 1px 1px 0px $l5r5e-black-light;
|
||||
}
|
||||
.message {
|
||||
background-color: $l5r5e-chat-color;
|
||||
color: $black-light;
|
||||
ul {
|
||||
li {
|
||||
padding: 0.25rem;
|
||||
border: 1px solid rgba(0, 0, 0, 0.05);
|
||||
border-bottom: 0 none;
|
||||
&:nth-child(odd) {
|
||||
background: $l5r5e-odd;
|
||||
}
|
||||
&:nth-child(even) {
|
||||
background: $l5r5e-even;
|
||||
}
|
||||
&:last-child {
|
||||
border-bottom: 1px solid rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
}
|
||||
}
|
||||
&.roll {
|
||||
background-color: $l5r5e-chat-color-roll;
|
||||
}
|
||||
&.blind {
|
||||
background-color: $l5r5e-chat-color-blind;
|
||||
}
|
||||
&.whisper {
|
||||
background-color: $l5r5e-chat-color-whisper;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// hotbar
|
||||
#hotbar {
|
||||
//margin: 0;
|
||||
#action-bar {
|
||||
//flex: 0 0 100%;
|
||||
.macro {
|
||||
background-position: center;
|
||||
background-size: 100%;
|
||||
background: linear-gradient(
|
||||
$l5r5e-linear-gradient-second,
|
||||
$l5r5e-linear-gradient-second-dark,
|
||||
$l5r5e-linear-gradient-second
|
||||
);
|
||||
background-origin: padding-box;
|
||||
border-image: url("../assets/ui/macro-button.webp");
|
||||
border-image-slice: 8 fill;
|
||||
border-image-width: 0.25rem;
|
||||
border-image-outset: 0;
|
||||
border-radius: 0;
|
||||
.macro-key {
|
||||
background: $l5r5e-black;
|
||||
}
|
||||
&.active {
|
||||
background: linear-gradient(
|
||||
$l5r5e-linear-gradient-second-dark,
|
||||
$l5r5e-linear-gradient-second,
|
||||
$l5r5e-linear-gradient-second-dark
|
||||
);
|
||||
box-shadow: 1px 1px 10px $black inset;
|
||||
border: 1px solid rgba(195, 165, 130, 0.5);
|
||||
}
|
||||
}
|
||||
#macro-list {
|
||||
background: transparent;
|
||||
margin: 0;
|
||||
padding: 0.05rem;
|
||||
border-radius: 0;
|
||||
border: 0 none;
|
||||
box-shadow: 0.25rem 0.25rem 0.5rem $black-light;
|
||||
}
|
||||
}
|
||||
.bar-controls {
|
||||
background-position: center;
|
||||
background-size: 100%;
|
||||
background: linear-gradient(
|
||||
$l5r5e-linear-gradient-second,
|
||||
$l5r5e-linear-gradient-second-dark,
|
||||
$l5r5e-linear-gradient-second
|
||||
);
|
||||
background-origin: padding-box;
|
||||
border-image: url("../assets/ui/macro-button.webp") 15 repeat;
|
||||
border-image-width: 0.5rem;
|
||||
border-image-outset: 0px;
|
||||
box-shadow: 0 0 0.25rem $black-light;
|
||||
border-radius: 0;
|
||||
margin: 0 0.5rem;
|
||||
a.page-control,
|
||||
span.page-number {
|
||||
font-size: 1rem;
|
||||
line-height: 0.95rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// players
|
||||
#players {
|
||||
border-radius: 0;
|
||||
background-position: center;
|
||||
background-size: 100%;
|
||||
background: linear-gradient(
|
||||
$l5r5e-linear-gradient-second,
|
||||
$l5r5e-linear-gradient-second-dark,
|
||||
$l5r5e-linear-gradient-second
|
||||
);
|
||||
background-origin: padding-box;
|
||||
border: 1px solid rgb(195, 165, 130);
|
||||
background-origin: padding-box;
|
||||
border-image: url("../assets/ui/macro-button.webp") 15 repeat;
|
||||
border-image-width: 0.5rem;
|
||||
border-image-outset: 0px;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
left: 0.2rem;
|
||||
bottom: 0.65rem;
|
||||
box-shadow: inset 0 0 0.5rem $black-light;
|
||||
position: relative;
|
||||
&:before {
|
||||
z-index: -1;
|
||||
position: absolute;
|
||||
content: "";
|
||||
background: transparent url("../assets/ui/players-border.webp") no-repeat 0 0;
|
||||
background-size: 100%;
|
||||
display: block;
|
||||
top: -12px;
|
||||
right: 10%;
|
||||
left: 10%;
|
||||
bottom: 0;
|
||||
.chat-message {
|
||||
ul,li {
|
||||
list-style: none;
|
||||
margin: unset;
|
||||
padding: unset;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -623,11 +192,14 @@ button {
|
||||
border-right: 1px solid $l5r5e-white-light;
|
||||
}
|
||||
li {
|
||||
flex: 1;
|
||||
cursor: url("../assets/cursors/pointer.webp"), pointer;
|
||||
}
|
||||
}
|
||||
.prepared {
|
||||
justify-content: space-evenly;
|
||||
}
|
||||
.encounter {
|
||||
justify-content: space-between;
|
||||
i {
|
||||
font-size: 23px;
|
||||
vertical-align: middle;
|
||||
@@ -645,7 +217,6 @@ button {
|
||||
|
||||
&-icon {
|
||||
font-weight: 900;
|
||||
font-family: "Font Awesome 5 Free";
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
display: inline-block;
|
||||
@@ -683,27 +254,7 @@ button {
|
||||
}
|
||||
|
||||
// Compendium
|
||||
.compendium,
|
||||
.compendium-list {
|
||||
.compendium-pack {
|
||||
.pack-title {
|
||||
margin: 0;
|
||||
line-height: 1rem;
|
||||
}
|
||||
.compendium-footer {
|
||||
text-align: right;
|
||||
margin-right: 2rem;
|
||||
font-size: 0.75rem;
|
||||
color: rgba(240, 240, 225, 0.75);
|
||||
}
|
||||
}
|
||||
.ring-filter,
|
||||
.number-filter {
|
||||
.selected {
|
||||
background-image: radial-gradient(closest-side, yellow, transparent);
|
||||
}
|
||||
}
|
||||
|
||||
.directory-item {
|
||||
.ring-filter {
|
||||
i.i_earth,
|
||||
i.i_fire,
|
||||
@@ -713,20 +264,29 @@ button {
|
||||
line-height: unset; // do not have it rised up
|
||||
}
|
||||
}
|
||||
.directory-item {
|
||||
.ring-rarity-rank {
|
||||
flex: unset
|
||||
|
||||
.ring-rarity-rank {
|
||||
flex: unset
|
||||
}
|
||||
}
|
||||
|
||||
.not-for-players {
|
||||
filter:brightness(0.5);
|
||||
}
|
||||
|
||||
.compendium-header {
|
||||
.ring-filter{
|
||||
.selected {
|
||||
filter: drop-shadow(0px 0px 5px yellow);
|
||||
}
|
||||
}
|
||||
|
||||
.not-for-players {
|
||||
filter:brightness(0.5);
|
||||
.rank-filter {
|
||||
.selected {
|
||||
filter: drop-shadow(0px 0px 5px yellow) drop-shadow(0px 0px 5px yellow) drop-shadow(0px 0px 5px yellow);
|
||||
}
|
||||
}
|
||||
|
||||
l5r5e-multi-select {
|
||||
select {
|
||||
background: rgba(255, 255, 245, 0.8); // same as the header-search in compendium popout
|
||||
}
|
||||
.input-element-tags {
|
||||
max-height: 100px;
|
||||
}
|
||||
@@ -860,14 +420,26 @@ button {
|
||||
min-width: 240px;
|
||||
|
||||
.window-content {
|
||||
[data-application-part="hidden_tabs"] {
|
||||
display: none;
|
||||
}
|
||||
table {
|
||||
margin: 0;
|
||||
overflow: auto;
|
||||
}
|
||||
form {
|
||||
padding: 0 0.5rem;
|
||||
}
|
||||
thead tr > th {
|
||||
background: rgba(186, 187, 177, 0.9);
|
||||
background: rgb(0 0 0 / 90%);
|
||||
color: #cfcfcfc7;
|
||||
position: sticky;
|
||||
z-index: 2;
|
||||
top: 0;
|
||||
|
||||
i.i_void:before {
|
||||
color: rgba(207,207,207,.8);
|
||||
}
|
||||
}
|
||||
th,
|
||||
td {
|
||||
@@ -895,47 +467,38 @@ button {
|
||||
}
|
||||
|
||||
#l5r5e-gm-toolbox {
|
||||
//bottom: 0;
|
||||
//right: 0.5rem;
|
||||
display: flex;
|
||||
background-position: center;
|
||||
background-size: 100%;
|
||||
background: linear-gradient(
|
||||
$l5r5e-linear-gradient-second,
|
||||
$l5r5e-linear-gradient-second-dark,
|
||||
$l5r5e-linear-gradient-second
|
||||
);
|
||||
background-origin: padding-box;
|
||||
border: 1px solid rgb(195, 165, 130);
|
||||
background-origin: padding-box;
|
||||
border-image: url("../assets/ui/macro-button.webp") 10 repeat;
|
||||
border-image-width: 0.5rem;
|
||||
border-image-outset: 0px;
|
||||
padding: 0;
|
||||
margin: 0.5rem;
|
||||
.window-header {
|
||||
text-align: center;
|
||||
border-bottom: 1px solid rgb(195, 165, 130);
|
||||
h4 {
|
||||
background: none; //keep the same background as the toolbox, not the default black opaque
|
||||
.window-title {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
h1 {
|
||||
letter-spacing: 0.25rem;
|
||||
line-height: 2.25rem;
|
||||
color: $white-light;
|
||||
padding-top: 1ch;
|
||||
}
|
||||
}
|
||||
.window-content {
|
||||
text-align: center;
|
||||
vertical-align: middle;
|
||||
background: transparent;
|
||||
color: $white-light;
|
||||
form {
|
||||
padding: 0;
|
||||
}
|
||||
padding: 0;
|
||||
.gm-tools-container {
|
||||
color: var(--color-text-primary);
|
||||
display: flex;
|
||||
font-size: 2rem;
|
||||
line-height: 2rem;
|
||||
min-height: 2rem;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
li {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
@@ -1025,12 +588,15 @@ l5r5e-multi-select:has( > button.gm) {
|
||||
}
|
||||
}
|
||||
|
||||
#client-settings:has( l5r5e-multi-select) {
|
||||
.form-fields:has(l5r5e-multi-select) {
|
||||
order: 3; // Move the multiselect to be below the title and description for nicer ui
|
||||
form#settings-config {
|
||||
|
||||
div.form-group:has(l5r5e-multi-select) {
|
||||
.form-fields {
|
||||
order: 3; // Move the multiselect to be below the title and description for nicer ui
|
||||
}
|
||||
}
|
||||
|
||||
[data-setting-id="l5r5e.compendium-unofficial-content-for-players"] {
|
||||
div.form-group:has(#settings-config-l5r5e\.compendium-unofficial-content-for-players) {
|
||||
// Move the tags and input fields to a similar place as for the multiselect
|
||||
.form-fields {
|
||||
order: 3;
|
||||
@@ -1043,9 +609,6 @@ l5r5e-multi-select:has( > button.gm) {
|
||||
|
||||
|
||||
.autocomplete-wrapper {
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
|
||||
.autocomplete-list {
|
||||
position: absolute;
|
||||
border: 1px solid #6e7e6b;
|
||||
|
||||
@@ -7,12 +7,12 @@
|
||||
"changelog": "https://gitlab.com/teaml5r/l5r5e/-/blob/master/CHANGELOG.md",
|
||||
"license": "https://gitlab.com/teaml5r/l5r5e/-/blob/master/LICENSE.md",
|
||||
"manifest": "https://gitlab.com/teaml5r/l5r5e/-/raw/master/system/system.json",
|
||||
"download": "https://gitlab.com/teaml5r/l5r5e/-/jobs/artifacts/v1.12.3/raw/l5r5e.zip?job=build",
|
||||
"version": "1.12.3",
|
||||
"download": "https://gitlab.com/teaml5r/l5r5e/-/jobs/artifacts/v1.13.1/raw/l5r5e.zip?job=build",
|
||||
"version": "1.13.1",
|
||||
"compatibility": {
|
||||
"minimum": "12",
|
||||
"verified": "12",
|
||||
"maximum": "12"
|
||||
"minimum": "13",
|
||||
"verified": "13",
|
||||
"maximum": "13"
|
||||
},
|
||||
"socket": true,
|
||||
"authors": [
|
||||
|
||||
@@ -61,6 +61,6 @@
|
||||
</fieldset>
|
||||
<fieldset class="army-abilities">
|
||||
<legend>{{localize 'l5r5e.army.army_abilities'}}</legend>
|
||||
{{editor data.enrichedHtml.army_abilities target="system.army_abilities" button=true editable=options.editable}}
|
||||
{{editor data.enrichedHtml.army_abilities target="system.army_abilities" button=true editable=options.editable engine="prosemirror" collaborate=false}}
|
||||
</fieldset>
|
||||
</div>
|
||||
@@ -1,23 +1,23 @@
|
||||
{{!-- Supplies and Logistics --}}
|
||||
<fieldset class="supplies_logistics">
|
||||
<legend class="text-block-header">{{localize 'l5r5e.army.supplies_logistics'}}</legend>
|
||||
{{editor data.enrichedHtml.supplies_logistics target="system.supplies_logistics" button=true editable=options.editable}}
|
||||
{{editor data.enrichedHtml.supplies_logistics target="system.supplies_logistics" button=true editable=options.editable engine="prosemirror" collaborate=false}}
|
||||
</fieldset>
|
||||
|
||||
{{!-- Past Battles --}}
|
||||
<fieldset class="past_battles">
|
||||
<legend class="text-block-header">{{localize 'l5r5e.army.past_battles'}}</legend>
|
||||
{{editor data.enrichedHtml.past_battles target="system.past_battles" button=true editable=options.editable}}
|
||||
{{editor data.enrichedHtml.past_battles target="system.past_battles" button=true editable=options.editable engine="prosemirror" collaborate=false}}
|
||||
</fieldset>
|
||||
|
||||
{{!-- Description (public) --}}
|
||||
<fieldset class="description">
|
||||
<legend class="text-block-header">{{localize 'l5r5e.sheets.description'}}</legend>
|
||||
{{editor data.enrichedHtml.description target="system.description" button=true editable=options.editable}}
|
||||
{{editor data.enrichedHtml.description target="system.description" button=true editable=options.editable engine="prosemirror" collaborate=false}}
|
||||
</fieldset>
|
||||
|
||||
{{!-- Notes (private) --}}
|
||||
<fieldset class="note">
|
||||
<legend class="text-block-header">{{localize 'l5r5e.sheets.notes'}}</legend>
|
||||
{{editor data.enrichedHtml.notes target="system.notes" button=true editable=options.editable}}
|
||||
{{editor data.enrichedHtml.notes target="system.notes" button=true editable=options.editable engine="prosemirror" collaborate=false}}
|
||||
</fieldset>
|
||||