Compare commits
103 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f57ebb0ccd | ||
|
|
b1a1430114 | ||
|
|
aeec63dcc4 | ||
|
|
bed3f2ac4f | ||
|
|
8c961f856d | ||
|
|
fd672d7bad | ||
|
|
3aded2f850 | ||
|
|
3c21fd3ff1 | ||
|
|
4d2423fc27 | ||
|
|
cf603de1e8 | ||
|
|
5c1f2fdbd9 | ||
|
|
447c738796 | ||
|
|
5ca8d800fc | ||
|
|
a5011caf9c | ||
|
|
64ca1abd8b | ||
|
|
a051bf281b | ||
|
|
b7195484e1 | ||
|
|
9501f482f2 | ||
|
|
4961d3bba3 | ||
|
|
1ec3b5700d | ||
|
|
127417a554 | ||
|
|
b883689b63 | ||
|
|
c82a3324d8 | ||
|
|
fcb3f2b58d | ||
|
|
a62781ba69 | ||
|
|
286ee72c9f | ||
|
|
f8afea9513 | ||
|
|
90ccfd1d68 | ||
|
|
53f04e6cef | ||
|
|
4f9b72c63f | ||
|
|
4350ea25ee | ||
|
|
cda02bd8c7 | ||
|
|
0bef6afc66 | ||
|
|
209c22996a | ||
|
|
c2d2dbb9fe | ||
|
|
93cfe5bb86 | ||
|
|
df86ba81e7 | ||
|
|
a27766a280 | ||
|
|
ac90c99dc2 | ||
|
|
b6f3d42fa2 | ||
|
|
35f61dac84 | ||
|
|
62f350f4a8 | ||
|
|
7943d38e87 | ||
|
|
80907c8a01 | ||
|
|
f3999af8b0 | ||
|
|
ef238dd683 | ||
|
|
5c141d642d | ||
|
|
2500877251 | ||
|
|
9a25e96e1f | ||
|
|
676898117a | ||
|
|
d043949b0f | ||
|
|
035f982d7f | ||
|
|
5cf4401fa3 | ||
|
|
69e96b6610 | ||
|
|
87b54ac3ef | ||
|
|
08c0059ca5 | ||
|
|
bc615d05fa | ||
|
|
da0bdf453e | ||
|
|
dfef6d4092 | ||
|
|
5ffaa062fc | ||
|
|
14b47a5381 | ||
|
|
d213d179dc | ||
|
|
42708d54e8 | ||
|
|
386a62ef55 | ||
|
|
babbafffef | ||
|
|
3eb623120a | ||
|
|
d2f9b6891e | ||
|
|
a00fa80607 | ||
|
|
95d031c7a8 | ||
|
|
cb0696f662 | ||
|
|
db5d5b62aa | ||
|
|
6b322be3f4 | ||
|
|
48b17be458 | ||
|
|
7d7d62f950 | ||
|
|
fa03e5152b | ||
|
|
a823d89344 | ||
|
|
47eb508dd4 | ||
|
|
1cc496ad77 | ||
|
|
e0cb2bf235 | ||
|
|
8a22706ad2 | ||
|
|
0cb0a2f3ea | ||
|
|
fc56afa28e | ||
|
|
768fda1752 | ||
|
|
694333a1cb | ||
|
|
b54f58c9ce | ||
|
|
6a9e84f126 | ||
|
|
84b160b50d | ||
|
|
78568ded55 | ||
|
|
b59fde880d | ||
|
|
7969c5f526 | ||
|
|
ca5a164f7f | ||
|
|
45ae96724e | ||
|
|
7f987a7682 | ||
|
|
d88d985575 | ||
|
|
9f8a24bd68 | ||
|
|
4e629efe12 | ||
|
|
e542dd390b | ||
|
|
a517a92488 | ||
|
|
30da4f3a02 | ||
|
|
931a28fbfe | ||
|
|
4350506e09 | ||
|
|
68577737fc | ||
|
|
30f71e31cd |
@@ -28,6 +28,7 @@ module.exports = {
|
||||
"no-plusplus": "off",
|
||||
},
|
||||
globals: {
|
||||
foundry: "readonly",
|
||||
AudioHelper: "readonly",
|
||||
Collection: "readonly",
|
||||
Hooks: "readonly",
|
||||
|
||||
5
.gitignore
vendored
5
.gitignore
vendored
@@ -6,4 +6,7 @@ node_modules
|
||||
.vscode
|
||||
|
||||
# lint
|
||||
.eslintcache
|
||||
.eslintcache
|
||||
|
||||
# Foundry Lock files
|
||||
system/l5r5e.lock
|
||||
|
||||
57
CHANGELOG.md
57
CHANGELOG.md
@@ -1,5 +1,62 @@
|
||||
# Changelog
|
||||
|
||||
## 1.3.0 - Foundry 0.8 Compatibility
|
||||
__! Be certain to carefully back up any critical user data before installing this update !__
|
||||
- Updated the System to the new version of Foundry VTT (a lot of things broke).
|
||||
- NPC can now have strengths/weaknesses with all rings.
|
||||
- Added "Title", "Bond", "Signature Scroll" and "Item Pattern":
|
||||
- The item types.
|
||||
- Theirs compendiums entries.
|
||||
- A new list in experience tab to not mess with school cursus.
|
||||
- Item patterns :
|
||||
- Can be dropped on another item to add the associated property.
|
||||
- To change the linked property, drop any property on the item pattern sheet.
|
||||
- Added an optional "Specificity" technique type to serve as a catch-all.
|
||||
- Added Mantis clan compendium entries.
|
||||
- Added a "Description" in PC/NPC sheet: this field is used in limited view ("description" are public, "notes" are private).
|
||||
- PC/NPC : Removed the "titles" field in social.
|
||||
- NPC : Moved the "note" field in social to gain some space, and uniformize with PC.
|
||||
- Fix : rnkMessage not passing on actor object for NPCs (thanks to Bragma).
|
||||
- Fix : The "Crescent Moon Style" technique rank from 4 to 2.
|
||||
- Fix : Drop an advancement on a PC/NPC sheet now correctly add the bonus to the Actor (ex Air +1), and the same with remove.
|
||||
- QoL : RnK button is now black in chat if no actions are left in roll (new messages only).
|
||||
- QoL : Added symbols legend in RnK dialog as reminder.
|
||||
- QoL : Added "(x Max)" display in RnK picker for max number of dice to keep (thanks to Bragma).
|
||||
- QoL : When DiceSoNice is enabled, the display of the RnK dialog is delayed by 2s before show-up.
|
||||
- Others minor optimizations (ex: 20q saving multiple item at once).
|
||||
|
||||
## 1.2.1 - Praised be Firefox
|
||||
- Fix dice swap on firefox that overflowed on the top and bottom of the RnK dialog
|
||||
- Fix new items list on firefox who deformed the sheets
|
||||
|
||||
## 1.2.0 - Roll n Keep
|
||||
- Added Roll n Keep 1st iteration !
|
||||
- Ability to Keep, Discard, Re-roll and Swap:
|
||||
- Keep: Keep the die for the next step, if it's an explosive one, automatically roll a new die
|
||||
- Discard: Self explain, do not keep this die for the next step.
|
||||
- Re-roll: Replace this die by a new roll (Usually Advantage & Disadvantage stuff). When a reroll is selected, all the dice in the current step will be tag as keep by default.
|
||||
- Swap (Face): Set a desired face for this die (Some weird techniques stuff)
|
||||
- Usage:
|
||||
- All these actions are done by drag and drop a die result into a target action
|
||||
- A colored icon symbolize the choice made on the dice
|
||||
- You can always change choices for the current step until you clic next
|
||||
- Please note all dice without choice will be discarded for the next step
|
||||
- The GM has the ability to undo choices by left-clicking in the status headers
|
||||
- Limitation: The roll need to only have L5R dice in it (no mixed regular + L5R)
|
||||
- Fix image's behavior on create for all items sub classes
|
||||
- Click on rings in the PC/PNC sheet now open the DicePicker with the selected ring
|
||||
- Added a booster for loading compendium's core items (speed up 20Q)
|
||||
- Added confirm dialog on item's deletion (Hold "ctrl" on the click, if you want to bypass it)
|
||||
- Added "Sleep" & "Scene End" buttons in "GM ToolBox" (old "difficulty" box)
|
||||
- Token's bar:
|
||||
- The strife bar is now displayed in red if the actor is compromised
|
||||
- Added an option, off by default, to reverse the fatigue's token bar (thanks to Jzrzmy)
|
||||
- Added an option, on by default, to set the TN to 1 when the encounter type is selected (Intrigue, Duel, Skirmish or Mass battle)
|
||||
- Split Techniques & Items by category in actor sheet (pc & npc) for better readability
|
||||
- Armor & Weapon added in the conflict tab now set the "equipped" property by default
|
||||
- Added Tabs on NPC sheets
|
||||
- New styles for dice results
|
||||
|
||||
## 1.1.2 - One Compendium to bring them all
|
||||
- Added compendiums (Thanks to Stéfano Fara for the English version !) Partial for French as PoW and CR are not translated yet
|
||||
- Shadowlands
|
||||
|
||||
14
README.md
14
README.md
@@ -1,6 +1,9 @@
|
||||
# Legend of the Five Rings (5th Edition) by [Edge Studio](https://edge-studio.net/)
|
||||
|
||||

|
||||
[](https://forge-vtt.com/bazaar#package=l5r5e)
|
||||
[](https://www.foundryvtt-hub.com/package/l5r5e/)
|
||||
[](https://www.foundryvtt-hub.com/package/l5r5e/)
|
||||
|
||||
# English
|
||||
|
||||
@@ -12,8 +15,9 @@ This version is authorized by Edge Studio, all texts, images and copyrights are
|
||||
> https://gitlab.com/teaml5r/l5r5e/-/raw/master/system/system.json
|
||||
|
||||
### Recommended modules
|
||||
- Dice so Nice, for 3D dices : https://gitlab.com/riccisi/foundryvtt-dice-so-nice
|
||||
- Search Anywhere : https://gitlab.com/riccisi/foundryvtt-search-anywhere (don't spent too much time searching the right technique)
|
||||
- `Babele` required for non english compendium translation: https://gitlab.com/riccisi/foundryvtt-babele
|
||||
- `Dice so Nice` for 3D dices : https://gitlab.com/riccisi/foundryvtt-dice-so-nice
|
||||
- `Search Anywhere` https://gitlab.com/riccisi/foundryvtt-search-anywhere (don't spent too much time searching the right technique)
|
||||
|
||||
## Current L5R team (alphabetical order)
|
||||
- Carter (compendiums, adventure adaptation)
|
||||
@@ -51,8 +55,8 @@ La traduction du système fonctionne directement, cependant les compendiums néc
|
||||
> https://gitlab.com/riccisi/foundryvtt-babele
|
||||
|
||||
### Modules recommandés
|
||||
- Dice so Nice, pour avoir des dés 3D : https://gitlab.com/riccisi/foundryvtt-dice-so-nice
|
||||
- Search Anywhere : https://gitlab.com/riccisi/foundryvtt-search-anywhere (pour ne pas perdre top de temps à chercher une technique)
|
||||
- `Dice so Nice` pour avoir des dés 3D : https://gitlab.com/riccisi/foundryvtt-dice-so-nice
|
||||
- `Search Anywhere` pour ne pas perdre top de temps à chercher une technique : https://gitlab.com/riccisi/foundryvtt-search-anywhere
|
||||
|
||||
|
||||
## Nous rejoindre
|
||||
@@ -78,7 +82,7 @@ Vous êtes libre de contribuer et proposer après fork des corrections, modifica
|
||||
3. Limitez-vous si possible à une Feature par demande de Merge pour ne pas bloquer le processus.
|
||||
|
||||
|
||||
Screens
|
||||
# Screenshots
|
||||

|
||||

|
||||

|
||||
|
||||
10158
package-lock.json
generated
10158
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -24,7 +24,6 @@
|
||||
"eslint": "^7.15.0",
|
||||
"eslint-config-prettier": "^6.15.0",
|
||||
"eslint-plugin-prettier": "^3.1.4",
|
||||
"foundry-pc-types": "gitlab:foundry-projects/foundry-pc/foundry-pc-types",
|
||||
"gulp": "^4.0.2",
|
||||
"gulp-autoprefixer": "^7.0.1",
|
||||
"gulp-sass": "^4.1.0",
|
||||
|
||||
70
system/assets/icons/items/bond.svg
Normal file
70
system/assets/icons/items/bond.svg
Normal file
@@ -0,0 +1,70 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
|
||||
y="0px"
|
||||
viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
|
||||
<g>
|
||||
<g>
|
||||
<path d="M465.254,46.747C435.109,16.601,395.03,0,352.4,0s-82.709,16.602-112.854,46.747l-62.486,62.486
|
||||
c-11.56,11.563-21.192,24.71-28.697,39.129c-14.424,7.508-27.572,17.141-39.132,28.7l-62.484,62.484
|
||||
C16.601,269.691-0.001,309.77,0,352.401c0,42.63,16.602,82.708,46.746,112.852c30.141,30.141,70.219,46.742,112.851,46.746
|
||||
c0.005,0,0.009,0,0.014,0c42.621,0,82.696-16.601,112.84-46.746l62.487-62.486c11.557-11.558,21.189-24.704,28.697-39.128
|
||||
c14.426-7.509,27.574-17.142,39.134-28.702l62.484-62.484c30.146-30.144,46.748-70.224,46.747-112.854
|
||||
C512,116.969,495.398,76.891,465.254,46.747z M313.725,381.554l-62.486,62.486c-24.48,24.479-57.017,37.96-91.627,37.958
|
||||
c-0.002,0-0.01,0-0.012,0c-34.62-0.003-67.166-13.483-91.641-37.958C43.481,419.562,30,387.017,30,352.4
|
||||
c-0.001-34.617,13.48-67.163,37.959-91.641l62.484-62.483c10.392-10.391,22.355-18.871,35.555-25.205
|
||||
c17.357-8.33,36.764-12.732,56.122-12.732c19.257,0,38.566,4.36,55.836,12.609c13.261,6.334,25.296,14.856,35.769,25.327
|
||||
c7.984,7.985,14.831,16.872,20.438,26.514l-11.795,11.795l-8.811,8.811c-0.994,0.994-2.045,1.909-3.138,2.759
|
||||
c-5.795,4.511-12.877,6.964-20.339,6.964c-1.328,0-2.641-0.087-3.94-0.239c-6.29-0.74-12.183-3.237-17.087-7.266
|
||||
c-0.006-0.005-0.013-0.011-0.019-0.017c-0.415-0.341-0.823-0.694-1.224-1.057c-0.057-0.051-0.11-0.107-0.167-0.159
|
||||
c-0.35-0.322-0.697-0.648-1.035-0.986l-0.001-0.001c-0.065-0.064-0.13-0.129-0.196-0.192c-0.239-0.237-0.49-0.458-0.732-0.691
|
||||
c-0.489-0.471-0.977-0.944-1.478-1.398c-0.308-0.277-0.626-0.539-0.938-0.81c-0.471-0.409-0.939-0.824-1.42-1.218
|
||||
c-0.356-0.291-0.723-0.564-1.084-0.847c-0.452-0.354-0.899-0.714-1.359-1.055c-0.405-0.3-0.823-0.581-1.234-0.871
|
||||
c-0.429-0.301-0.852-0.611-1.288-0.902c-0.456-0.304-0.923-0.587-1.386-0.878c-0.404-0.255-0.803-0.519-1.212-0.764
|
||||
c-0.506-0.303-1.024-0.584-1.538-0.872c-0.378-0.212-0.75-0.434-1.131-0.638c-0.56-0.298-1.13-0.574-1.698-0.855
|
||||
c-0.347-0.171-0.688-0.354-1.038-0.52c-0.613-0.289-1.235-0.554-1.857-0.823c-0.315-0.136-0.625-0.284-0.942-0.415
|
||||
c-0.669-0.276-1.347-0.528-2.025-0.781c-0.278-0.104-0.552-0.219-0.832-0.319c-0.723-0.258-1.456-0.491-2.188-0.722
|
||||
c-0.243-0.077-0.481-0.164-0.725-0.238c-0.79-0.239-1.589-0.453-2.39-0.661c-0.191-0.049-0.379-0.109-0.571-0.157
|
||||
c-0.867-0.216-1.741-0.407-2.618-0.587c-0.131-0.027-0.259-0.061-0.39-0.087c-0.986-0.195-1.98-0.366-2.978-0.515
|
||||
c-0.024-0.003-0.046-0.009-0.07-0.012c-3.074-0.454-6.203-0.686-9.368-0.686c-16.883,0-32.754,6.574-44.69,18.512l-62.316,62.317
|
||||
c-11.938,11.939-18.512,27.81-18.512,44.691c0,16.881,6.574,32.752,18.51,44.688c11.938,11.939,27.81,18.513,44.691,18.512
|
||||
c16.881-0.001,32.751-6.575,44.687-18.51l26.674-26.673c0.593,0.235,1.191,0.456,1.787,0.683c0.3,0.114,0.599,0.23,0.899,0.343
|
||||
c1.21,0.454,2.425,0.893,3.646,1.317c0.088,0.031,0.175,0.064,0.263,0.094c2.756,0.952,5.54,1.827,8.348,2.628
|
||||
c0.093,0.026,0.186,0.051,0.279,0.078c1.28,0.363,2.564,0.708,3.853,1.04c0.188,0.048,0.377,0.095,0.566,0.142
|
||||
c1.233,0.312,2.47,0.609,3.71,0.893c0.166,0.038,0.331,0.076,0.497,0.113c1.367,0.308,2.738,0.599,4.114,0.871
|
||||
c0.009,0.001,0.019,0.003,0.028,0.005c10.194,2.012,20.586,3.05,30.965,3.05c8.614-0.001,17.238-0.71,25.747-2.101
|
||||
C315.024,380.24,314.378,380.9,313.725,381.554z M309.008,156.041l19.919-19.918c6.27-6.27,14.607-9.724,23.476-9.724
|
||||
c8.868,0,17.204,3.453,23.475,9.725c6.271,6.27,9.725,14.606,9.725,23.474s-3.454,17.205-9.725,23.476l-19.919,19.917
|
||||
c-6.052-9.309-13.08-17.986-21.022-25.93C326.996,169.122,318.319,162.095,309.008,156.041z M202.993,355.959l-19.919,19.918
|
||||
c-6.27,6.27-14.607,9.723-23.476,9.723c-8.867,0.001-17.204-3.453-23.476-9.725c-6.271-6.27-9.724-14.607-9.724-23.474
|
||||
c0-8.869,3.454-17.206,9.726-23.478l19.916-19.917c6.054,9.314,13.082,17.991,21.022,25.933
|
||||
C185.004,342.88,193.682,349.906,202.993,355.959z M444.041,251.24l-62.484,62.484c-10.391,10.39-22.353,18.87-35.554,25.205
|
||||
c-17.357,8.329-36.763,12.731-56.119,12.731c-19.259-0.001-38.569-4.361-55.843-12.61c-13.257-6.332-25.291-14.853-35.767-25.326
|
||||
c-7.98-7.98-14.827-16.868-20.436-26.514l20.602-20.604c6.271-6.271,14.608-9.724,23.477-9.724c5.496,0,10.787,1.329,15.509,3.83
|
||||
c0.029,0.016,0.06,0.029,0.088,0.044c0.382,0.204,0.757,0.421,1.131,0.64c0.092,0.054,0.187,0.104,0.279,0.159
|
||||
c0.299,0.179,0.591,0.371,0.885,0.559c0.163,0.105,0.33,0.204,0.491,0.311c0.22,0.147,0.433,0.305,0.649,0.457
|
||||
c0.229,0.161,0.461,0.317,0.687,0.484c0.146,0.108,0.288,0.226,0.432,0.337c0.29,0.222,0.581,0.442,0.863,0.674
|
||||
c0.077,0.063,0.15,0.131,0.227,0.195c0.346,0.29,0.69,0.582,1.026,0.887c0.007,0.006,0.014,0.014,0.021,0.02
|
||||
c0.4,0.364,0.794,0.738,1.179,1.123c0.068,0.068,0.136,0.135,0.206,0.202c0.365,0.362,0.745,0.703,1.117,1.055
|
||||
c0.368,0.348,0.729,0.705,1.104,1.043c0.376,0.339,0.765,0.659,1.147,0.988c0.407,0.35,0.809,0.709,1.223,1.048
|
||||
c0.365,0.298,0.742,0.577,1.112,0.867c0.446,0.348,0.887,0.705,1.341,1.04c0.354,0.262,0.72,0.504,1.078,0.758
|
||||
c0.483,0.341,0.961,0.69,1.452,1.017c0.345,0.229,0.7,0.441,1.048,0.663c0.517,0.33,1.031,0.666,1.557,0.98
|
||||
c0.333,0.199,0.676,0.38,1.013,0.573c0.552,0.315,1.1,0.637,1.661,0.935c0.326,0.174,0.661,0.33,0.99,0.498
|
||||
c0.581,0.296,1.16,0.598,1.749,0.875c0.322,0.152,0.652,0.286,0.977,0.432c0.605,0.272,1.208,0.55,1.823,0.803
|
||||
c0.322,0.133,0.65,0.248,0.975,0.375c0.625,0.246,1.249,0.496,1.882,0.721c0.331,0.118,0.669,0.218,1.002,0.33
|
||||
c0.634,0.214,1.265,0.432,1.906,0.626c0.362,0.109,0.731,0.199,1.096,0.302c0.619,0.174,1.236,0.355,1.861,0.511
|
||||
c0.412,0.102,0.83,0.184,1.244,0.278c0.585,0.133,1.167,0.275,1.757,0.391c0.504,0.1,1.014,0.175,1.521,0.263
|
||||
c0.507,0.087,1.01,0.186,1.52,0.261c0.643,0.095,1.293,0.163,1.941,0.238c0.38,0.044,0.756,0.102,1.137,0.139
|
||||
c2.066,0.202,4.154,0.304,6.257,0.304c16.882,0,32.753-6.575,44.688-18.512l28.423-28.421c0.005-0.005,0.01-0.012,0.016-0.017
|
||||
l33.881-33.88c11.938-11.938,18.512-27.809,18.512-44.69c0-16.881-6.575-32.751-18.511-44.687
|
||||
c-11.936-11.938-27.807-18.512-44.689-18.512c-16.882,0-32.753,6.574-44.689,18.511l-26.674,26.673
|
||||
c-0.533-0.211-1.072-0.409-1.608-0.615c-0.392-0.15-0.782-0.302-1.175-0.449c-1.067-0.399-2.14-0.786-3.217-1.163
|
||||
c-0.227-0.079-0.451-0.163-0.678-0.241c-2.697-0.93-5.421-1.787-8.168-2.572c-0.218-0.063-0.438-0.121-0.656-0.183
|
||||
c-1.146-0.322-2.294-0.633-3.448-0.93c-0.29-0.075-0.58-0.146-0.871-0.22c-1.118-0.282-2.239-0.551-3.363-0.809
|
||||
c-0.265-0.061-0.53-0.122-0.795-0.181c-1.237-0.277-2.478-0.54-3.722-0.788c-0.131-0.026-0.262-0.054-0.393-0.08
|
||||
c-5.761-1.133-11.585-1.949-17.435-2.447c-0.047-0.004-0.095-0.008-0.142-0.012c-4.42-0.372-8.854-0.571-13.286-0.571
|
||||
c-8.614,0-17.237,0.709-25.747,2.1c0.639-0.667,1.286-1.327,1.939-1.982l62.484-62.484c24.479-24.479,57.024-37.96,91.641-37.96
|
||||
c34.616,0,67.162,13.481,91.641,37.96C468.519,92.439,482,124.983,482,159.599C482.001,194.216,468.52,226.761,444.041,251.24z"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 7.0 KiB |
16
system/assets/icons/items/item_pattern.svg
Normal file
16
system/assets/icons/items/item_pattern.svg
Normal file
@@ -0,0 +1,16 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 24.1.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 47.8 47.8" style="enable-background:new 0 0 47.8 47.8;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:#FFFFFF;}
|
||||
</style>
|
||||
<g>
|
||||
<path class="st0" d="M23.9,1.8c-12.2,0-22.1,9.9-22.1,22.1S11.7,46,23.9,46S46,36.1,46,23.9S36.1,1.8,23.9,1.8z M24.8,36.9
|
||||
c-0.2,0.1-0.3,0.1-0.5,0.1c-0.2,0-0.3,0.1-0.5,0.1c-1.5,0-2.8-1.2-2.8-2.8s1.2-2.8,2.8-2.8c0.2,0,0.3,0,0.5,0
|
||||
c0.2,0,0.3,0.1,0.5,0.1c1,0.4,1.9,1.4,1.9,2.6C26.7,35.4,25.8,36.5,24.8,36.9z M28.2,23c-0.4,0.2-0.6,0.4-1,0.6
|
||||
c-1-0.4-2.2-0.5-3.3-0.5c-6.2,0-11.3,5.1-11.3,11.3c0,3.9,2,7.4,5.1,9.4C9.3,41,3.2,33.2,3.2,23.9c0-11.5,9.3-20.7,20.7-20.7
|
||||
c5.7,0,10.4,4.6,10.4,10.4C34.3,17.7,31.8,21.3,28.2,23z M27.6,13.5c0,2-1.7,3.7-3.7,3.7s-3.7-1.7-3.7-3.7s1.7-3.7,3.7-3.7
|
||||
S27.6,11.5,27.6,13.5z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.0 KiB |
541
system/assets/icons/items/signature_scroll.svg
Normal file
541
system/assets/icons/items/signature_scroll.svg
Normal file
@@ -0,0 +1,541 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 24.1.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{display:none;}
|
||||
.st1{display:inline;}
|
||||
.st2{fill:#FFFFFF;}
|
||||
.st3{display:inline;fill:none;}
|
||||
.st4{font-family:'L5R-Icons';}
|
||||
.st5{font-size:480px;}
|
||||
.st6{fill:#699678;}
|
||||
.st7{fill:#917896;}
|
||||
.st8{fill:#9B7350;}
|
||||
.st9{fill:#5F919B;}
|
||||
.st10{fill:#4B4641;}
|
||||
.st11{fill:#A75B58;}
|
||||
.st12{fill:#68829B;}
|
||||
.st13{fill:#009933;}
|
||||
.st14{fill:#CC3300;}
|
||||
.st15{fill:#0099FF;}
|
||||
.st16{fill:#FF6600;}
|
||||
.st17{fill:#FF0000;}
|
||||
.st18{fill:none;}
|
||||
.st19{fill:#78FFB4;}
|
||||
.st20{display:inline;fill:#785A87;}
|
||||
.st21{display:inline;fill:#9B463C;}
|
||||
.st22{display:inline;fill:#B9784B;}
|
||||
.st23{display:inline;fill:#2D551E;}
|
||||
.st24{display:inline;fill:#A08C50;}
|
||||
.st25{display:inline;fill:#55826E;}
|
||||
.st26{display:inline;fill:#82828C;}
|
||||
.st27{display:inline;fill:#789191;}
|
||||
</style>
|
||||
<g id="Fond" class="st0">
|
||||
<g transform="translate(0,0)" class="st1">
|
||||
<path class="st2" d="M249.9,18.6c-81.4,0-231.4,155.8-171.7,300.7c8,25.3,27.9,50.3,49.2,77.1c24.5,30.6,51.6,63.2,68.7,96.9h20.6
|
||||
c-18.1-39.8-48.6-75.9-74.6-108.5c-27.4-34.3-48.8-65.3-48.8-88c0-3.6,0.4-7.3,1.1-11.1l-0.1,0c0.3-1.2,0.6-2.5,0.9-3.7
|
||||
c0.9-3.8,2.1-7.6,3.7-11.4c23.1-61.4,94.2-106.3,146.6-135l3.6-2l3.9,1.3c60.9,20.9,131.3,66.8,156,135.8c1.1,3,2.1,6,2.9,9
|
||||
c0.4,1.4,0.8,2.8,1.2,4.3l-0.2,0c1.1,5.1,1.7,10.2,1.7,15.2v0c0,22.3-24.4,53.5-55,87.5c-29.1,32.3-62.3,67.6-80,106.6H300
|
||||
c16.8-32.1,46.2-64,73.3-94.1c23.1-25.7,45.3-50,54.9-74.9C481,200.2,329,18.7,249.9,18.6L249.9,18.6z M250.7,154
|
||||
c-38.7,21.5-85,52.2-113.6,88.2c9.7,83,59,146.2,118.3,146.2c59.1,0,108.2-62.7,118.2-145.3C344.7,200.9,295.6,170.1,250.7,154
|
||||
L250.7,154z M192.5,237c0.8,0,1.6,0,2.4,0c13,0.1,26,2.7,39.1,7.4c-16.8,40.6-59,42-78.1,0C168.1,239.6,180.3,237.2,192.5,237z
|
||||
M317.4,237c13-0.1,26,2.3,39.1,7.4c-19.1,42-61.3,40.6-78.1,0C291.3,239.7,304.4,237.1,317.4,237L317.4,237z M204.6,512l0.1,0.3
|
||||
h86.8l0.1-0.3L204.6,512L204.6,512z"/>
|
||||
</g>
|
||||
<rect y="18.6" class="st3" width="512" height="493.4"/>
|
||||
<text transform="matrix(1 0 0 1 16 468.6476)" class="st1 st4 st5"></text>
|
||||
</g>
|
||||
<g id="Elements" class="st0">
|
||||
<g id="Earth" class="st1">
|
||||
<g>
|
||||
<path class="st6" d="M31,258.6c0-30.9,5.9-60.2,17.8-87.7c11.6-27.2,27.6-51,48-71.5c20.5-20.5,44.3-36.5,71.5-48
|
||||
c27.5-11.9,56.7-17.8,87.7-17.8s60.2,5.9,87.7,17.8c27.2,11.6,51,27.6,71.5,48c20.5,20.5,36.5,44.3,48,71.5
|
||||
c11.9,27.5,17.8,56.7,17.8,87.7s-5.9,60.2-17.8,87.7c-11.6,27.2-27.6,51-48,71.5c-20.5,20.5-44.3,36.5-71.5,48
|
||||
c-27.5,11.9-56.7,17.8-87.7,17.8s-60.2-5.9-87.7-17.8c-27.2-11.6-51-27.6-71.5-48c-20.5-20.5-36.5-44.3-48-71.5
|
||||
C36.9,318.8,31,289.6,31,258.6z M438.3,181.8c-10.3-24.1-24.5-45.1-42.4-63c-18-18-39-32.1-63-42.4C308.8,66,283.2,60.8,256,60.8
|
||||
s-52.8,5.2-76.9,15.5c-24.1,10.3-45.1,24.5-63,42.4c-18,18-32.1,39-42.4,63c-10.3,24.1-15.5,49.7-15.5,76.9
|
||||
c0,5.3,0.2,10.6,0.7,15.9c0.5,5.3,1,10.6,1.6,15.9l4.2-0.5c5.9-4.4,11.4-9.3,16.4-14.8c5-5.5,9.7-11.3,14.1-17.6
|
||||
c5.3,0.9,10.8,0.8,16.4-0.5c5.6-1.2,10.6-4.8,15-10.8l55.8-75.9l16.4,22l75-83.9l35.2,36.6c4.1,4.4,7.4,9.4,10.1,15
|
||||
c2.7,5.6,6,10.8,10.1,15.5c5.3,6.3,10.9,12.4,16.6,18.5c5.8,6.1,12.1,11.6,19,16.6l8.4,6.6l21.1-12.2
|
||||
c7.2,17.5,15.2,34.7,24.1,51.6s18.7,33.6,29.3,50.2c2.2-7.8,3.8-15.7,4.7-23.7s1.4-16.2,1.4-24.6
|
||||
C453.8,231.5,448.7,205.8,438.3,181.8z M162.3,231.9l37-19.2l-15.9-19.2L162.3,231.9z M313.7,234.3l28.6,47.3
|
||||
c5-4.7,9.6-10.5,13.8-17.3c4.2-6.9,8.2-14.5,12-23L288.3,156l-34.7,227.3L313.7,234.3z M405.1,277.4c0.9-2.8,2.3-5.6,4.2-8.4
|
||||
l-20.6-37h-1.9l6.1,75c3.1-2.2,5.6-5.2,7.5-9.1c1.9-3.9,3-7.9,3.3-12C403.7,283,404.1,280.2,405.1,277.4z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Air">
|
||||
<g class="st1">
|
||||
<path class="st7" d="M31,258.6c0-30.9,5.9-60.2,17.8-87.7c11.6-27.2,27.6-50.9,48-71.3c20.5-20.3,44.3-36.4,71.5-48.3
|
||||
c27.5-11.9,56.7-17.8,87.7-17.8s60.2,5.9,87.7,17.8c27.2,11.9,51,28,71.5,48.3c20.5,20.3,36.5,44.1,48,71.3
|
||||
c11.9,27.5,17.8,56.7,17.8,87.7s-5.9,60.2-17.8,87.7c-11.6,27.2-27.6,51-48,71.5c-20.5,20.5-44.3,36.5-71.5,48
|
||||
c-27.5,11.9-56.7,17.8-87.7,17.8s-60.2-5.9-87.7-17.8c-27.2-11.6-51-27.6-71.5-48c-20.5-20.5-36.5-44.3-48-71.5
|
||||
C36.9,318.8,31,289.6,31,258.6z M138.8,314c-11.9-5.6-22.6-13.2-32.1-22.7c-9.5-9.5-17.7-21.2-24.6-34.9
|
||||
c-7.2-13.7-13-29.8-17.3-48.3c-2.2,8.1-3.8,16.4-4.9,24.8c-1.1,8.4-1.6,17-1.6,25.8c0,3.1,0.1,6.2,0.2,9.1c0.2,3,0.4,5.9,0.7,8.7
|
||||
C77.9,293,97,306,116.5,315.4c19.5,9.4,39.6,12.8,60.2,10.3C163,323.2,150.4,319.3,138.8,314z M443.3,194.7
|
||||
c-7-20.2-16.8-38.5-29.3-55.1c-20.9-14.1-43.3-21.9-67-23.4c-23.8-1.6-46,1.4-66.8,8.9c-20.8,7.5-38.5,18.6-53.2,33.3
|
||||
c-14.7,14.7-23.4,31.3-26.3,49.7c-1.6,10.9,3,21.6,13.6,31.9c10.6,10.3,21.4,15.6,32.3,15.9c8.4,0.3,16.5-3,24.1-9.8
|
||||
c7.7-6.9,12-14.4,12.9-22.5c0.6-5.9-0.8-11.7-4.2-17.3c-3.4-5.6-8.9-9.4-16.4-11.3c-4.1-0.9-8.5-0.2-13.4,2.1
|
||||
c-4.8,2.3-7.7,5.7-8.7,10.1c-1.3,4.7-1.1,8.4,0.5,11.3c1.6,2.8,4.2,4.2,8,4.2c3.4,0.3,6.3-0.8,8.7-3.3c2.3-2.5,0.5-5.9-5.4-10.3
|
||||
c5.9-0.3,10.3,1.3,13.1,4.9c2.8,3.6,3.6,9.1,2.3,16.6c-0.6,4.1-3.4,7.2-8.4,9.4c-5,2.2-9.5,3-13.6,2.3
|
||||
c-7.2-1.2-13.8-5.2-19.7-11.7c-5.9-6.6-8.9-13.4-8.9-20.6c0-9.4,3.8-18.8,11.3-28.1s15.9-14.4,25.3-15
|
||||
c12.8-0.9,24.8,1.1,35.9,6.1c11.1,5,18.5,19.8,22.3,44.5c5.9-11.3,14.5-19.2,25.8-23.9s22.7-5.7,34.2-3
|
||||
c11.6,2.7,22,9.3,31.4,19.9c9.1,10.3,14.2,25,15.5,44.1c0.9,12.2-1.7,23.9-8,35.2c-5.9,11.3-13.8,20.7-23.7,28.4
|
||||
c-9.8,7.7-20.7,12.6-32.6,14.8c-11.9,2.5-23.1,0.9-33.8-4.7c2.5,20-0.9,35.9-10.3,47.8c-9.4,11.6-21.6,18.8-36.6,21.8
|
||||
c-15,3-31.3,1.3-48.8-4.9c-17.2-6.2-32.3-17.3-45.5-33.3c-1.3-1.2-3.2-1.8-5.9-1.6c-2.7,0.2-4.6,1-5.9,2.6l-5.6,8.4
|
||||
c-17.8-6.2-35.2-16.4-52.3-30.5c-17-14.1-33.8-30.9-50.4-50.6c3.8,23.8,11.3,45.9,22.5,66.6c11.6,20.6,26.1,38.5,43.6,53.7
|
||||
c17.5,15.2,37.2,27,59.1,35.4c22.2,8.8,45.8,13.1,70.8,13.1c27.2,0,52.8-5.2,76.9-15.5c24.1-10.3,45.1-24.4,63-42.4
|
||||
c18-18,32.1-39,42.4-63c10.3-24.1,15.5-49.7,15.5-76.9C453.8,236.1,450.3,214.8,443.3,194.7z M147.7,93.2
|
||||
c-7.2,4.7-14.1,9.8-20.6,15.5s-12.8,11.7-18.8,18.3c-4.4,35.6-3.6,64.1,2.3,85.3c5.6,21.3,14.9,37.6,27.9,49
|
||||
c13,11.4,28.8,18.8,47.6,22.3c18.4,3.4,38.1,5,59.1,4.7c-26.6-4.1-48.1-11.6-64.7-22.5c-16.3-10.9-28.1-24.8-35.4-41.5
|
||||
c-7.3-16.7-10.5-36.2-9.6-58.4C136.2,143.7,140.2,119.4,147.7,93.2z M309.4,68.1c-10.9-3-22.2-5.1-33.8-6.3
|
||||
C256,69,239.1,77.1,225.1,86.1c-13.8,9.4-24.8,19.8-33,31.4c-8.3,11.6-13.5,24.1-15.7,37.5c-2.5,13.8-2.2,28.4,0.9,44.1
|
||||
c1.6-16.9,5.8-32.2,12.7-45.9c7.2-14.1,17.4-26.1,30.7-36.1c13.3-10,29.9-18.1,49.9-24.4c20-6.6,43.4-10.8,70.3-12.7
|
||||
C330.8,75.1,320.4,71.1,309.4,68.1z M264,317.2c-3.1,2.8-5.2,6.1-6.1,9.8c-0.3,1.9,0.2,3.9,1.6,6.1c1.4,2.2,3,3.6,4.9,4.2
|
||||
c1.2,0.3,2.6,0.2,4-0.5c1.4-0.6,2.4-1.4,3-2.3c0.6-0.9,1-1.9,1.2-2.8c0.2-0.9,0.1-1.7-0.2-2.3c-0.3-0.6-0.7-1.2-1.2-1.6
|
||||
s-1-0.9-1.6-1.2c8.1-1.2,11.6,2.4,10.5,11c-1.1,8.6-6.5,14-16.2,16.2c-8.4,1.6-15-0.5-19.7-6.1s-7.2-12.2-7.5-19.7
|
||||
c0-13.1,5.1-22,15.2-26.5c10.2-4.5,22.7-5.7,37.7-3.5c-13.1-10.9-26.3-14.2-39.4-9.8c-13.4,4.1-23.4,11.4-30,22
|
||||
c-6.6,10.6-8,22-4.2,34.2s15.9,20.9,36.6,26.3c22.8,3.4,36.7-3.8,41.7-21.6c5-17.8-1.3-29.4-18.8-34.7
|
||||
C271,313.5,267.1,314.4,264,317.2z M379,259.4c2-5.5,2.9-10.9,2.6-16.2c-0.3-4.4-1.7-8.6-4.2-12.7c-2.5-4.1-5.6-7.3-9.4-9.8
|
||||
c-2.8-2.2-6.1-3.5-9.8-4s-7.3-0.2-10.8,0.7c-3.1,0.6-6,2-8.7,4c-2.7,2-4.5,4.6-5.4,7.7c-0.6,1.9-0.6,3.9,0,6.1
|
||||
c0.6,2.2,1.6,4.1,2.8,5.6c1.6,1.3,3.5,2.1,5.9,2.6s4.5,0.4,6.3-0.2c1.2-0.3,2.4-1.1,3.5-2.3c1.1-1.2,1.6-2.5,1.6-3.8
|
||||
c0.3-0.9,0.2-1.8-0.5-2.6c-0.6-0.8-1.4-1.5-2.3-2.1c-0.9-0.6-1.8-1.2-2.6-1.6c-0.8-0.5-1.6-0.9-2.6-1.2c0.3-1.2,1.7-2.1,4.2-2.6
|
||||
c2.5-0.5,4.5-0.2,6.1,0.7c3.4,1.6,6.3,4.4,8.7,8.4c2.3,4.1,3,8,2.1,11.7c-1.6,5.3-5.2,9.7-10.8,13.1c-5.6,3.4-11.1,5.2-16.4,5.2
|
||||
c-5.9,0-11.6-1.9-16.9-5.6c-5.3-3.8-9.2-8.9-11.7-15.5c-1.6,5.9-3.3,11.1-5.2,15.5c-1.9,4.4-4.1,7.7-6.6,9.8
|
||||
c9.4,12.2,20.7,18.4,34,18.5c13.3,0.2,25.7-5.2,37.3-16.2C374.1,269.3,377,264.8,379,259.4z M389.1,227.7
|
||||
c4.4,20.3,2.8,37.3-4.7,51.1c-7.5,13.8-22.8,23.4-45.9,29.1c11.9,3.1,23,2.2,33.3-2.8c10.3-5.3,18.4-12.3,24.4-21.1
|
||||
c5.9-8.7,8.7-18.4,8.4-29.1C404,244.6,398.8,235.5,389.1,227.7z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Fire">
|
||||
<g class="st1">
|
||||
<path class="st8" d="M31,258.6c0-30.9,5.9-60.2,17.8-87.7c11.6-27.2,27.6-51,48-71.5c20.5-20.5,44.3-36.5,71.5-48
|
||||
c27.5-11.9,56.7-17.8,87.7-17.8s60.2,5.9,87.7,17.8c27.2,11.6,51,27.6,71.5,48c20.5,20.5,36.5,44.3,48,71.5
|
||||
c11.9,27.5,17.8,56.7,17.8,87.7s-5.9,60.2-17.8,87.7c-11.6,27.2-27.6,51-48,71.5c-20.5,20.5-44.3,36.5-71.5,48
|
||||
c-27.5,11.9-56.7,17.8-87.7,17.8s-60.2-5.9-87.7-17.8c-27.2-11.6-51-27.6-71.5-48c-20.5-20.5-36.5-44.3-48-71.5
|
||||
C36.9,318.8,31,289.6,31,258.6z M370.4,384.7c0.3-3.1,1.4-5.3,3.3-6.6c2.8-2.5,4.7-5.4,5.6-8.7s1.4-7.4,1.4-12.4
|
||||
c2.2,3.1,3.8,6.8,4.9,11c1.1,4.2,0.9,9.5-0.7,15.7c-0.9,2.2-0.6,3.8,0.9,4.7c1.6,0.9,3.3,0,5.2-2.8c6.6-10.3,9.7-20.7,9.4-31.2
|
||||
c-0.3-10.5-3.3-20.9-8.9-31.2c-8.1-16.9-10.2-30.1-6.1-39.6c4.1-9.5,12.8-15.1,26.3-16.6c-13.1,9.1-18.2,18.2-15.2,27.4
|
||||
c3,9.2,12,18.5,27,27.9c4.1-5.9,8.3-11.5,12.7-16.6c4.4-5.2,8.9-9.8,13.6-13.8l1.9-0.9c0.6-5.3,1.2-10.6,1.6-15.9
|
||||
c0.5-5.3,0.7-10.8,0.7-16.4c0-27.2-5.2-52.8-15.5-76.9c-10.3-24.1-24.5-45.1-42.4-63c-18-18-39-32.1-63-42.4
|
||||
C308.8,66,283.2,60.8,256,60.8s-52.8,5.2-76.9,15.5c-24.1,10.3-45.1,24.5-63,42.4c-18,18-32.1,39-42.4,63
|
||||
c-10.3,24.1-15.5,49.7-15.5,76.9c0,21.9,3.4,42.7,10.1,62.6c6.7,19.8,16.2,38,28.4,54.6c1.6-0.3,3.4-0.5,5.4-0.5
|
||||
c2,0,3.4-0.5,4-1.4c0.6-0.9,0.7-1.9,0.2-2.8s-0.5-1.7-0.2-2.3c2.5-4.4,6.3-8,11.5-10.8s10.1-4.4,14.8-4.7
|
||||
c-5.6,5.9-9.4,11.6-11.3,17.1c-1.9,5.5-0.9,10.1,2.8,13.8l10.3,10.8c0.9-6.9,2.3-13.4,4.2-19.7c1.9-6.2,4.1-12.3,6.6-18.3
|
||||
c0.9,5.9,2.4,11.8,4.5,17.6c2,5.8,3.4,11.6,4,17.6c10-1.2,14.9-6.6,14.8-16.2c-0.2-9.5-2.1-17.1-5.9-22.7l-6.6-10.3
|
||||
c-10.3-16.6-19.1-36.4-26.3-59.5c-7.2-23.1,3.9-42,33.3-56.7c-9.7,9.4-14.6,18.7-14.8,27.9c-0.2,9.2,4.5,17.9,13.8,26
|
||||
c2.2-12.8,6.2-20.3,12-22.5c5.8-2.2,8.2-15.3,7.3-39.4c6.2,5.3,9.8,13.7,10.8,25.1c0.9,11.4,4.4,18.4,10.3,20.9
|
||||
c7.2-4.1,8.6-12.9,4.2-26.5c-4.4-13.6-9.8-26.6-16.4-39.1c-15-26.9-17.3-49.7-7-68.4c10.3-19.1,24.4-32.3,42.2-39.6
|
||||
c17.8-7.3,35-7.7,51.6-1.2c16.6,6.3,23.4,21.3,20.6,45c-1.9-19.1-7.7-30-17.3-32.8c-9.7-2.5-18.1,0-25.3,7.5
|
||||
c-7.2,7.5-10.8,18.8-10.8,33.8c0,14.7,8.9,30,26.7,45.9c10.6-2.8,16-8.4,16.2-16.9c0.2-8.4-0.4-15.9-1.6-22.5
|
||||
c2.8,6.6,5.6,12.7,8.4,18.5c2.8,5.8,6.4,10.4,10.8,13.8c3.1,3.1,5.4,7.3,6.8,12.7c1.4,5.3,1.6,12,0.7,20.2l20.2,19.2
|
||||
c4.1-2.8,6.7-6.2,8-10.1c1.2-3.9,0.6-8.4-1.9-13.4l-5.2-10.3c-5.9-11.9-8.1-23-6.6-33.5c1.6-10.5,10.2-15.7,25.8-15.7
|
||||
c-10.9,8.1-16.1,15.6-15.5,22.5c0.6,6.9,3.1,13,7.5,18.3l13.1,15.9c9.1,10.6,15.3,22.7,18.8,36.1c3.4,13.4,0.2,29.1-9.8,46.9
|
||||
c9.1,15.6,13,30.2,11.7,43.8c-1.3,13.6-6.6,26.3-15.9,38.2c-0.6,1.9-1.6,3.5-3,4.9s-2.3,3-2.6,4.9c-0.3,2.2-0.2,4.3,0.2,6.3
|
||||
c0.5,2,1.2,4.1,2.1,6.3c0.3,0.6,0.7,1.4,1.2,2.3s1.2,1.4,2.1,1.4c1.2,0,2.3-0.8,3.3-2.3c0.9-1.6,1.7-3,2.3-4.2
|
||||
C369.1,390.5,370.1,387.9,370.4,384.7z M301,408.6c0.3-7.5,3.8-13.7,10.3-18.8c8.4-6.6,15.7-14.3,21.8-23.2s8.2-17.1,6.3-24.6
|
||||
c-1.3,3.4-3.2,5.6-5.9,6.6c-2.7,0.9-5.6,1.3-8.7,0.9l-10.8-0.9c-1.3,0-2-1.1-2.3-3.3c-0.3-2.2-0.2-3.9,0.5-5.2
|
||||
c10.3-16.9,16.6-31.2,19-42.9s1-20.2-4-25.5c-1.3,5.3-4.1,11.1-8.7,17.3c-4.5,6.3-8.7,9.5-12.4,9.8h-7c-1.9,0-3.7-0.5-5.4-1.6
|
||||
c-1.7-1.1-2.9-2.6-3.5-4.5c-4.4-15.3-10.9-28.5-19.7-39.6c-8.8-11.1-18-21.6-27.7-31.6c10,35.9,9.4,63.8-1.9,83.7
|
||||
c-11.3,19.8-30,24.6-56.3,14.3c10,18.1,16.9,35.6,20.6,52.3c3.8,16.7-0.9,31.6-14.1,44.8c-0.3,0.3-0.6,0.5-0.9,0.7
|
||||
c-0.3,0.2-0.8,0.2-1.4,0.2h-5.2c-0.9,0-1.9,0.2-2.8,0.7s-1.9,1-2.8,1.6c-0.6,0.6-1.2,1.3-1.6,2.1c-0.5,0.8-0.7,1.6-0.7,2.6
|
||||
c-0.3,0.9-0.4,1.9-0.2,2.8c0.2,0.9,0.4,1.7,0.7,2.3c0.6,0.9,1.2,1.7,1.6,2.3c0.5,0.6,1,1.3,1.6,1.9c2.8,2.2,5.9,4.2,9.1,6.1
|
||||
s6.6,3.1,10.1,3.8l8.9-2.3c-2.8-3.8-5.1-7.1-6.8-10.1c-1.7-3-2.6-5.1-2.6-6.3c1.9,0.6,3.9,1.9,6.1,3.8c2.2,1.9,4.5,4.1,7,6.6
|
||||
l7.5-5.2c1.9-4.7,3.1-9.5,3.8-14.5c0.6-5,0-9.7-1.9-14.1l-7.5-17.8c-0.3-1.2-0.5-2.4-0.7-3.5c-0.2-1.1-0.1-2.3,0.2-3.5l13.1,17.8
|
||||
c2.2,3.1,4.4,3.3,6.6,0.5c2.2-2.8,3.9-5.2,5.2-7c1.2-2.5,1.6-5.4,0.9-8.7c-0.6-3.3-1.4-6.3-2.3-9.1c-2.2-5.9-5.2-11.6-8.9-16.9
|
||||
c-3.8-5.3-7.8-10.3-12.2-15c6.2,1.9,11.8,5.3,16.6,10.3c4.8,5,9.8,9.8,14.8,14.5c2.5,2.5,4.9,3.4,7.3,2.6
|
||||
c2.3-0.8,2.7-2.9,1.2-6.3c-4.1-10.6-5.7-22.7-4.9-36.1c0.8-13.4,6-26.3,15.7-38.4c-0.3,7.2,0,16.5,0.9,27.9
|
||||
c0.9,11.4,4.4,19.8,10.3,25.1c4.4,2.2,9.1,1.5,14.1-2.1c5-3.6,8.7-7.7,11.3-12.4c-5.9,17.2-8.2,33.9-6.8,50.2
|
||||
c1.4,16.3-3.5,31.1-14.8,44.5c-5,5.6-4.8,10.7,0.5,15.2c5.3,4.5,10.6,4.1,15.9-1.2c-3.4,5.3-5.2,9.4-5.2,12.2s2.5,4.1,7.5,3.8
|
||||
c2.8-0.9,5.5-2,8.2-3.3c2.7-1.2,5.2-2.7,7.7-4.2C305.5,426.8,300.7,416.1,301,408.6z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Water">
|
||||
<g class="st1">
|
||||
<path class="st9" d="M31,258.6c0-30.9,5.9-60.2,17.8-87.7c11.6-27.2,27.6-51,48-71.5c20.5-20.5,44.3-36.5,71.5-48
|
||||
c27.5-11.9,56.7-17.8,87.7-17.8s60.2,5.9,87.7,17.8c27.2,11.6,51,27.6,71.5,48c20.5,20.5,36.5,44.3,48,71.5
|
||||
c11.9,27.5,17.8,56.7,17.8,87.7s-5.9,60.2-17.8,87.7c-11.6,27.2-27.6,51-48,71.5c-20.5,20.5-44.3,36.5-71.5,48
|
||||
c-27.5,11.9-56.7,17.8-87.7,17.8s-60.2-5.9-87.7-17.8c-27.2-11.6-51-27.6-71.5-48c-20.5-20.5-36.5-44.3-48-71.5
|
||||
C36.9,318.8,31,289.6,31,258.6z M376,327.8c11.9-8,22-17.1,30.5-27.4c8.4-10,14.8-21.2,19.2-33.5c4.4-12.3,8.1-24.8,11.3-37.3
|
||||
c1.6-6.6,2.7-13.1,3.5-19.7c0.8-6.6,1.2-13.1,1.2-19.7c-6.9-19.1-16.4-36.4-28.6-52c-12.5-15.9-26.8-29.6-42.9-41
|
||||
c-16.1-11.4-33.8-20.4-53.2-27c-19.4-6.2-39.7-9.4-60.9-9.4c-27.2,0-52.8,5.2-76.9,15.5c-24.1,10.3-45.1,24.5-63,42.4
|
||||
c-18,18-32.1,39-42.4,63c-10.3,24.1-15.5,49.7-15.5,76.9c0,10,0.7,19.8,2.1,29.3c1.4,9.5,3.5,18.8,6.3,27.9
|
||||
c9.7-44.4,22.7-81.4,38.9-111.1c16.6-29.7,35.9-52.9,58.1-69.6c22.2-16.7,47.2-27.4,75-32.1c27.8-4.4,58-3.8,90.5,1.9l13.1,11.7
|
||||
l-17.8,3.3c-3.1,0.6-6.4,1.3-9.8,1.9c-3.4,0.6-6.4,1.9-8.9,3.8c-1.6,0.9-3,2.2-4.5,3.8c-1.4,1.6-1.8,3.1-1.2,4.7
|
||||
c0.3,0.9,1,1.5,2.1,1.6c1.1,0.2,2.1,0.4,3,0.7c3.1,0.6,6.2,0.5,9.4-0.2c3.1-0.8,6.2-1,9.4-0.7c3.8,0.3,7.7,0.7,11.7,1.2
|
||||
c4.1,0.5,7.8,1.6,11.3,3.5c5.3,2.5,10.6,5.6,15.9,9.4c5.3,3.8,9.2,8.4,11.7,14.1c1.2,3.1,1.5,6.6,0.7,10.3
|
||||
c-0.8,3.8-1.5,7.3-2.1,10.8c-3.8-10.3-8.3-16.6-13.6-19c-5.3-2.3-11.6-4-18.8-4.9c-6.9-0.9-12.4,0.5-16.6,4.5
|
||||
c-4.2,3.9-4.6,9.3-1.2,16.2c0.6,1.6,1.6,3,3,4.5s2.7,2.7,4,4l12.2,10.3c6.9,5.9,11.6,13.7,14.1,23.2c2.5,9.5,0.2,19.9-7,31.2
|
||||
c0-9.1-1.1-16.2-3.3-21.6c-2.2-5.3-5.8-8.3-10.8-8.9l-14.1-3.8c-5.9-1.6-10.2-0.9-12.9,1.9c-2.7,2.8-2.1,7.8,1.6,15l3.8,6.1
|
||||
c3.8,6.3,4.8,14.1,3,23.7c-1.7,9.5-5.9,16.2-12.4,19.9c2.2-14.7,0.9-25-3.8-30.9c-4.7-5.9-11.6-9.2-20.6-9.8
|
||||
c-6.6-2.5-13.8-2.2-21.6,0.9c-7.8,3.1-14.1,7.3-18.8,12.7c-5,5.6-8.6,12.7-10.8,21.1c-2.2,8.4-2,16.3,0.5,23.4
|
||||
c3.1,9.4,9.3,17.2,18.5,23.4c9.2,6.3,18.5,11.1,27.9,14.5c9.7,3.8,20.1,5.9,31.2,6.3c11.1,0.5,21.8-0.5,32.1-3
|
||||
C351.8,341.6,364.1,335.8,376,327.8z M189,408.2l-2.8-2.8c-1.9-1.9-1.5-4.8,1.2-8.7c2.7-3.9,5.4-5.7,8.2-5.4l115.8,8.9
|
||||
c17.8,1.3,34.6-3.9,50.4-15.5c15.8-11.6,29-26.4,39.6-44.5c-11.9,10.6-26.6,19.3-44.1,26c-17.5,6.7-34.8,9.3-52,7.7l-119.5-9.4
|
||||
c-3.8,0.3-6.8,1.6-9.1,3.8c-2.3,2.2-3.7,5.3-4,9.4L157.1,366c-5.9-4.7-10.8-10.5-14.5-17.6s-7.3-14-10.8-20.9
|
||||
c-2.5-5.3-2.1-9.5,1.2-12.7c3.3-3.1,7.4-2.8,12.4,0.9l15,9.4l6.1-7l-27.2-23c-4.7-2.8-9.7-2.4-15,1.2c-5.3,3.6-8.3,7.6-8.9,12
|
||||
c-1.9,10.9-1,22.3,2.6,34c3.6,11.7,9.4,21.3,17.6,28.8l46.9,46.4L189,408.2z M293,177.6c-0.6-6.6,2.2-12.7,8.4-18.3
|
||||
c-19.1-0.6-29.1-4.5-30-11.5s4.7-16.2,16.9-27.4c-17.8-1.2-34.4-0.2-49.7,3.3c-15.3,3.4-29.5,9.1-42.7,17.1s-25.3,18-36.6,30.2
|
||||
c-10.9,11.9-21.1,25.6-30.5,41.3c15.6-6.9,30.6-11.9,45-15c14.7-3.1,28.8-4.1,42.4-3c13.6,1.1,26.5,4.6,38.7,10.5
|
||||
c12.2,5.9,23.7,14.8,34.7,26.7c-3.4-9.7-3.1-17.2,0.9-22.5c4.1-5.3,11.7-8.4,23-9.4C300.5,191.5,293.7,184.1,293,177.6z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Void">
|
||||
<g class="st1">
|
||||
<path class="st10" d="M31,258.6c0-30.9,5.9-60.2,17.8-87.7c11.6-27.2,27.6-51,48-71.5c20.5-20.5,44.3-36.5,71.5-48
|
||||
c27.5-11.9,56.7-17.8,87.7-17.8s60.2,5.9,87.7,17.8c27.2,11.6,51,27.6,71.5,48c20.5,20.5,36.5,44.3,48,71.5
|
||||
c11.9,27.5,17.8,56.7,17.8,87.7s-5.9,60.2-17.8,87.7c-11.6,27.2-27.6,51-48,71.5c-20.5,20.5-44.3,36.5-71.5,48
|
||||
c-27.5,11.9-56.7,17.8-87.7,17.8s-60.2-5.9-87.7-17.8c-27.2-11.6-51-27.6-71.5-48c-20.5-20.5-36.5-44.3-48-71.5
|
||||
C36.9,318.8,31,289.6,31,258.6z M438.3,181.8c-10.3-24.1-24.5-45.1-42.4-63c-18-18-39-32.1-63-42.4C308.8,66,283.2,60.8,256,60.8
|
||||
s-52.8,5.2-76.9,15.5c-24.1,10.3-45.1,24.5-63,42.4c-18,18-32.1,39-42.4,63c-10.3,24.1-15.5,49.7-15.5,76.9
|
||||
c0,21.6,3.3,42.2,9.8,61.9c6.6,19.4,15.7,37.2,27.4,53.4c11.7,16.3,25.5,30.5,41.5,42.7c16.2,12.2,33.9,21.7,53,28.6
|
||||
c-15-6.2-28.8-14.7-41.3-25.3c-12.5-10.3-23.2-22.2-32.1-35.6c-8.9-13.4-15.9-28-20.9-43.6c-5-15.9-7.5-32.7-7.5-50.2
|
||||
c0-23.1,4.4-44.8,13.1-65.2c8.7-20.3,20.7-38,35.9-53.2c15.2-15.2,32.9-27.3,53.2-36.3c20.6-8.7,42.5-13.1,65.6-13.1
|
||||
c23.1,0,44.8,4.4,65.2,13.1c20.3,9.1,38.1,21.2,53.4,36.3c15.3,15.2,27.3,32.9,36.1,53.2c8.7,20.3,13.1,42,13.1,65.2
|
||||
c0,17.5-2.5,34.2-7.5,50.2c-5,15.9-12,30.6-21.1,44.1c-9.1,13.4-20,25.3-32.8,35.6c-12.5,10.6-26.4,19.1-41.7,25.3
|
||||
c19.4-6.9,37.2-16.4,53.4-28.6c16.2-12.2,30.3-26.4,42.2-42.7c11.9-16.2,21.1-34.2,27.7-53.9s9.8-40.3,9.8-61.9
|
||||
C453.8,231.5,448.7,205.8,438.3,181.8z M211.9,344.4c12.2-12.2,26.9-18.3,44.1-18.3c17.2,0,31.9,6.1,44.1,18.3
|
||||
s18.3,26.9,18.3,44.1c0,12.5-3.4,23.8-10.3,34c-6.9,10.2-15.6,17.7-26.3,22.7c22.8-5.9,41.7-18.3,56.7-37S361,367.7,361,343
|
||||
c0-12.8-2.2-25-6.6-36.6c-4.4-11.6-10.5-22-18.3-31.2c-7.8-9.2-17-16.9-27.7-23.2c-10.6-6.2-22-10.5-34.2-12.7
|
||||
c7.2,3.4,13.1,8.7,17.8,15.7s7,14.8,7,23.2c0,12.2-4.2,22.4-12.7,30.7c-8.4,8.3-18.6,12.4-30.5,12.4c-11.9,0-22-4.1-30.5-12.4
|
||||
c-8.4-8.3-12.7-18.5-12.7-30.7c0-8.4,2.3-16.2,6.8-23.2c4.5-7,10.5-12.3,18-15.7c-12.5,2.2-24.1,6.4-34.7,12.7
|
||||
c-10.6,6.3-19.8,14-27.4,23.2c-7.7,9.2-13.8,19.6-18.5,31.2c-4.4,11.6-6.6,23.8-6.6,36.6c0,24.7,7.6,46.4,22.7,65.2
|
||||
c15.2,18.8,34.1,31.1,57,37c-10.9-5-19.8-12.6-26.5-22.7c-6.7-10.2-10.1-21.5-10.1-34C193.7,371.3,199.8,356.6,211.9,344.4z
|
||||
M304.3,382.4c0-13.4-4.7-24.8-14.1-34.2s-20.8-14.1-34.2-14.1c-13.4,0-24.8,4.7-34.2,14.1s-14.1,20.8-14.1,34.2
|
||||
c0,13.4,4.7,24.8,14.1,34.2s20.8,14.1,34.2,14.1c13.4,0,24.8-4.7,34.2-14.1S304.3,395.8,304.3,382.4z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Npcs" class="st0">
|
||||
<g id="Martial" class="st1">
|
||||
<g>
|
||||
<path class="st11" d="M57.3,388.5L31,315.4c8.7-1.9,18-3.4,27.7-4.7c9.7-1.2,20-1.9,30.9-1.9c5.9,10.6,13.3,20.5,22,29.5
|
||||
c8.7,9.1,19.1,17.2,30.9,24.4c-14.7,1.9-29.2,5-43.6,9.4C84.6,376.5,70.7,381.9,57.3,388.5z M50.7,100.7
|
||||
c12.2,9.1,22.7,19.1,31.6,30.2c8.9,11.1,10.5,22.9,4.9,35.4c-8.1,17.5-12.5,35.9-13.1,55.3c-0.6,19.4,3.6,38,12.7,56
|
||||
c9.1,18,23.4,34.6,43.1,49.9c19.7,15.3,45.8,27.7,78.3,37c2.8-6.2,6.1-11.3,9.8-15s7.7-7,11.7-9.8c-28.1-9.7-48.3-23-60.5-39.8
|
||||
s-18.8-33-19.7-48.3c-0.9-15.3,2.7-27.8,10.8-37.5c8.1-9.4,18.3-11.6,30.5-6.6c-2.5-17.5,1.2-28.4,11.3-32.8
|
||||
c10-4.4,19.7-1.4,29.1,8.9c7.8-21.2,5.9-39.9-5.6-56c-11.6-16.1-29.5-20.7-53.9-13.8c-5.9-7.8-13.8-13.9-23.7-18.3
|
||||
c-9.8-4.4-19.9-5-30.2-1.9c-10.3,3.1-20.7,3.7-31.2,1.6c-10.5-2-21.2-6-32.1-12L50.7,100.7z M83,393.6
|
||||
c17.2-6.2,34.5-12.7,51.8-19.5c17.3-6.7,30.1-4,38.2,8.2c5.3,0,10.6,0.4,15.9,1.2c5.3,0.8,10.5,2.7,15.5,5.9
|
||||
c0,5.3,0.7,10.4,2.1,15.2c1.4,4.8,3.5,9.3,6.3,13.4h-74.5v-13.6c-5.9,2.8-11.4,6.7-16.4,11.7c-5,5-9.7,10.9-14.1,17.8L83,393.6z
|
||||
M256,354.7c-9.1,0-16.8,3.1-23.2,9.4c-6.4,6.3-9.6,13.9-9.6,23c0,9.1,3.2,16.8,9.6,23.2c6.4,6.4,14.1,9.6,23.2,9.6
|
||||
c9.1,0,16.7-3.2,23-9.6c6.2-6.4,9.4-14.1,9.4-23.2c0-9.1-3.1-16.7-9.4-23C272.7,357.9,265.1,354.7,256,354.7z M461.3,100.7
|
||||
c-12.2,9.1-22.7,19.1-31.6,30.2c-8.9,11.1-10.5,22.9-4.9,35.4c8.1,17.5,12.5,35.9,13.1,55.3c0.6,19.4-3.6,38-12.7,56
|
||||
c-9.1,18-23.4,34.6-43.1,49.9c-19.7,15.3-45.8,27.7-78.3,37c-2.8-6.2-6.1-11.3-9.8-15s-7.7-7-11.7-9.8
|
||||
c28.1-9.7,48.3-23,60.5-39.8s18.8-33,19.7-48.3c0.9-15.3-2.7-27.8-10.8-37.5c-8.1-9.4-18.3-11.6-30.5-6.6
|
||||
c2.5-17.5-1.3-28.4-11.3-32.8c-10-4.4-19.7-1.4-29.1,8.9c-7.8-21.2-5.9-39.9,5.6-56c11.6-16.1,29.5-20.7,53.9-13.8
|
||||
c5.9-7.8,13.8-13.9,23.7-18.3c9.8-4.4,19.9-5,30.2-1.9c10.3,3.1,20.7,3.7,31.2,1.6c10.5-2,21.2-6,32.1-12L461.3,100.7z
|
||||
M429,393.6c-17.2-6.2-34.5-12.7-51.8-19.5c-17.3-6.7-30.1-4-38.2,8.2c-5.3,0-10.6,0.4-15.9,1.2c-5.3,0.8-10.5,2.7-15.5,5.9
|
||||
c0,5.3-0.7,10.4-2.1,15.2c-1.4,4.8-3.5,9.3-6.3,13.4h74.5v-13.6c5.9,2.8,11.4,6.7,16.4,11.7c5,5,9.7,10.9,14.1,17.8L429,393.6z
|
||||
M454.8,388.5l26.3-73.1c-8.8-1.9-18-3.4-27.7-4.7c-9.7-1.2-20-1.9-30.9-1.9c-5.9,10.6-13.3,20.5-22,29.5
|
||||
c-8.8,9.1-19.1,17.2-30.9,24.4c14.7,1.9,29.2,5,43.6,9.4C427.4,376.5,441.3,381.9,454.8,388.5z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Social">
|
||||
<g class="st1">
|
||||
<path class="st12" d="M249.4,382.4L31,265.2c7.8-6.9,15.9-13.3,24.1-19.2c8.3-5.9,17.1-11.3,26.5-15.9c2.8-6.6,5.4-13.2,7.7-19.9
|
||||
c2.3-6.7,4.1-13.5,5.4-20.4l-8.4-8.4c9.4-4.1,18.9-7.1,28.6-9.1c9.7-2,19.5-3.2,29.5-3.5c5.3-4.1,10.4-8.8,15.2-14.3
|
||||
c4.8-5.5,9.4-11.5,13.8-18l-6.6-11.3c9.1-0.3,18.3,0.5,27.7,2.6c9.4,2,19.2,5.2,29.5,9.6c6.9-1.9,13.4-4.2,19.7-7
|
||||
c6.2-2.8,12.2-6.6,17.8-11.3v-12.7c7.8,3.4,15.6,7.6,23.4,12.4c7.8,4.8,15.5,11.5,23,19.9c6.9,2.2,13.8,3.1,20.9,2.8
|
||||
c7-0.3,14-1.6,20.9-3.8l3.3-12.7c6.6,7.2,12.7,14.7,18.5,22.5c5.8,7.8,10.5,16.6,14.3,26.3c5.3,5,11.3,9.1,17.8,12.2
|
||||
c6.6,3.1,13.9,4.5,22,4.2l7-8.4c4.1,8.1,7.6,17.3,10.5,27.7c3,10.3,5.1,22,6.3,35.2c4.4,5.3,9.1,10.2,14.3,14.8
|
||||
c5.2,4.5,10.9,8.4,17.1,11.5L273.3,381.5l14.5,7.5c-3.4,15.3-12.4,22.7-27,22.3s-23.5-7.6-27-21.3L249.4,382.4z M186.2,304.1
|
||||
l-4.7,15.5l-17.8,9.4l80.6,42.2L186.2,304.1z M218.5,279.7l-9.4,11.3l-20.2,3.8l60,69.8L218.5,279.7z M256.5,361.3v-90.9l-13.1,7
|
||||
l-20.6-6.6L256.5,361.3z M264.9,363.6l31.4-84.8l-15,0.5l-16.9-14.1L264.9,363.6z M328.7,299.4l-7.5-1.9l-17.3-22l-31.4,89.1
|
||||
L328.7,299.4z M353,332.7l-8-7.5l-5.6-26.3l-59.5,71.7L353,332.7z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="list_-_copie">
|
||||
<g class="st1">
|
||||
<path d="M31,258.6c0-30.9,5.9-60.2,17.8-87.7c11.6-27.2,27.6-51,48-71.5c20.5-20.5,44.3-36.5,71.5-48
|
||||
c27.5-11.9,56.7-17.8,87.7-17.8s60.2,5.9,87.7,17.8c27.2,11.6,51,27.6,71.5,48c20.5,20.5,36.5,44.3,48,71.5
|
||||
c11.9,27.5,17.8,56.7,17.8,87.7s-5.9,60.2-17.8,87.7c-11.6,27.2-27.6,51-48,71.5c-20.5,20.5-44.3,36.5-71.5,48
|
||||
c-27.5,11.9-56.7,17.8-87.7,17.8s-60.2-5.9-87.7-17.8c-27.2-11.6-51-27.6-71.5-48c-20.5-20.5-36.5-44.3-48-71.5
|
||||
C36.9,318.8,31,289.6,31,258.6z M467.4,258.6c0-29.1-5.5-56.6-16.4-82.5c-11.3-25.6-26.4-48-45.5-67
|
||||
c-19.1-19.1-41.4-34.2-67-45.5c-25.9-10.9-53.4-16.4-82.5-16.4s-56.6,5.5-82.5,16.4c-25.6,11.3-48,26.4-67,45.5
|
||||
c-19.1,19.1-34.2,41.4-45.5,67c-10.9,25.9-16.4,53.4-16.4,82.5s5.5,56.6,16.4,82.5c11.3,25.6,26.4,48,45.5,67
|
||||
c19.1,19.1,41.4,34.2,67,45.5c25.9,10.9,53.4,16.4,82.5,16.4s56.6-5.5,82.5-16.4c25.6-11.3,48-26.4,67-45.5
|
||||
c19.1-19.1,34.2-41.4,45.5-67C461.9,315.2,467.4,287.7,467.4,258.6z M75.1,182.2c10.3-24.1,24.3-45,42-62.8
|
||||
c17.7-17.8,38.5-31.9,62.6-42.2c23.7-10.3,49.2-15.5,76.4-15.5s52.7,5.2,76.4,15.5c24.1,10.3,45,24.4,62.8,42.2
|
||||
s31.9,38.8,42.2,62.8c10.3,23.8,15.5,49.2,15.5,76.4s-5.2,52.7-15.5,76.4c-10.3,24.1-24.4,45-42.2,62.8s-38.8,31.9-62.8,42.2
|
||||
c-23.8,10.3-49.2,15.5-76.4,15.5s-52.7-5.2-76.4-15.5c-24.1-10.3-44.9-24.4-62.6-42.2c-17.7-17.8-31.6-38.7-42-62.8
|
||||
c-10.3-23.7-15.5-49.2-15.5-76.4S64.8,206,75.1,182.2z M190.6,305.1c13.6-5.6,24.8-16.2,33.5-31.9c-0.3-0.3-0.5-0.6-0.5-0.9
|
||||
c0-0.3-0.2-0.6-0.5-0.9c-11.9-3.8-23.4-5.3-34.5-4.7c-11.1,0.6-22,3-32.6,7c-2.2,4.1-5.5,7.3-9.8,9.6c-4.4,2.3-9.1,3.5-14.1,3.5
|
||||
c-7.8,0-14.5-2.7-19.9-8.2c-5.5-5.5-8.2-12.1-8.2-19.9c0-7.8,2.7-14.5,8.2-19.9c5.5-5.5,12.1-8.2,19.9-8.2c5,0,9.7,1.2,14.1,3.5
|
||||
c4.4,2.3,7.7,5.6,9.8,9.6c10.6,4.1,21.5,6.4,32.6,7c11.1,0.6,22.6-0.9,34.5-4.7c0.3-0.3,0.5-0.6,0.5-0.9c0-0.3,0.2-0.6,0.5-0.9
|
||||
c-11.3-20-26.3-33-45.2-39.1c-18.9-6.1-37.3-25.4-55.1-57.9c-12.8,15-22.8,32-30,51.1C86.6,217.2,83,237.4,83,258.6
|
||||
c0,21.3,3.6,41.4,10.8,60.5c7.2,19.1,17.2,36.1,30,51.1c4.1-7.5,8.1-14.1,12.2-19.7c4.1-5.6,8.3-10.5,12.7-14.5
|
||||
C163,321,177,310.7,190.6,305.1z M248,191.4c-0.6-11.1-3-21.8-7-32.1c-4.1-2.5-7.3-5.9-9.6-10.3c-2.3-4.4-3.5-9.1-3.5-14.1
|
||||
c0-7.8,2.7-14.5,8.2-19.9c5.5-5.5,12.1-8.2,19.9-8.2c7.8,0,14.5,2.7,19.9,8.2c5.5,5.5,8.2,12.1,8.2,19.9c0,5-1.2,9.7-3.5,14.1
|
||||
c-2.3,4.4-5.6,7.8-9.6,10.3c-4.1,10.3-6.4,21-7,32.1c-0.6,11.1,0.9,22.6,4.7,34.5c0.3,0.3,0.6,0.5,0.9,0.5c0.3,0,0.6,0.2,0.9,0.5
|
||||
c20-11.3,33-26.3,39.1-45.2c6.1-18.9,25.4-37.3,57.9-55.1c-15-12.8-32-22.8-51.1-30c-19.1-7.2-39.2-10.8-60.5-10.8
|
||||
c-21.3,0-41.4,3.6-60.5,10.8c-19.1,7.2-36.1,17.2-51.1,30c7.5,4.1,14.1,8.1,19.7,12.2c5.6,4.1,10.5,8.3,14.5,12.7
|
||||
c15,14.4,25.3,28.4,30.9,42s16.2,24.8,31.9,33.5c0.3-0.3,0.6-0.5,0.9-0.5c0.3,0,0.6-0.2,0.9-0.5C247.1,214,248.7,202.5,248,191.4
|
||||
z M347.9,378.6c-5.6-4.1-10.5-8.3-14.5-12.7c-15-14.4-25.3-28.4-30.9-42s-16.3-24.8-31.9-33.5c-0.3,0.3-0.6,0.5-0.9,0.5
|
||||
c-0.3,0-0.6,0.2-0.9,0.5c-3.8,11.9-5.3,23.4-4.7,34.5c0.6,11.1,3,22,7,32.6c4.1,2.2,7.3,5.5,9.6,9.8c2.3,4.4,3.5,9.1,3.5,14.1
|
||||
c0,7.8-2.7,14.5-8.2,19.9c-5.5,5.5-12.1,8.2-19.9,8.2c-7.8,0-14.5-2.7-19.9-8.2c-5.5-5.5-8.2-12.1-8.2-19.9c0-5,1.2-9.7,3.5-14.1
|
||||
c2.3-4.4,5.5-7.7,9.6-9.8c4.1-10.6,6.4-21.5,7-32.6c0.6-11.1-0.9-22.6-4.7-34.5c-0.3-0.3-0.6-0.5-0.9-0.5c-0.3,0-0.6-0.2-0.9-0.5
|
||||
c-20,11.3-33,26.3-39.1,45.2c-6.1,18.9-25.4,37.3-57.9,55.1c15,12.8,32,22.8,51.1,30c19.1,7.2,39.2,10.8,60.5,10.8
|
||||
c21.2,0,41.4-3.6,60.5-10.8c19.1-7.2,36.1-17.2,51.1-30C360.1,386.8,353.5,382.7,347.9,378.6z M418.2,198.2
|
||||
c-7.2-19.1-17.2-36.1-30-51.1c-4.1,7.5-8.1,14.1-12.2,19.7c-4.1,5.6-8.3,10.5-12.7,14.5c-14.4,15-28.4,25.3-42,30.9
|
||||
s-24.8,16.3-33.5,31.9c0.3,0.3,0.5,0.6,0.5,0.9c0,0.3,0.2,0.6,0.5,0.9c11.9,3.8,23.4,5.3,34.5,4.7c11.1-0.6,21.8-3,32.1-7
|
||||
c2.5-4.1,5.9-7.3,10.3-9.6c4.4-2.3,9.1-3.5,14.1-3.5c7.8,0,14.5,2.7,19.9,8.2c5.5,5.5,8.2,12.1,8.2,19.9c0,7.8-2.7,14.5-8.2,19.9
|
||||
c-5.5,5.5-12.1,8.2-19.9,8.2c-5,0-9.7-1.2-14.1-3.5c-4.4-2.3-7.8-5.5-10.3-9.6c-10.3-4.1-21-6.4-32.1-7
|
||||
c-11.1-0.6-22.6,0.9-34.5,4.7c-0.3,0.3-0.5,0.6-0.5,0.9c0,0.3-0.2,0.6-0.5,0.9c11.3,20,26.3,33,45.2,39.1
|
||||
c18.9,6.1,37.3,25.4,55.1,57.9c12.8-15,22.8-32,30-51.1c7.2-19.1,10.8-39.2,10.8-60.5C429,237.4,425.4,217.2,418.2,198.2z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Techs">
|
||||
<g id="Kihos" class="st0">
|
||||
<g class="st1">
|
||||
<path class="st13" d="M103.9,383.6c-8-5.8-11-15.5-9.1-29.3c16.9-1.6,33.5-3.4,49.9-5.6c16.4-2.2,32.4-2.8,48-1.9
|
||||
c-0.6-20.3,5.2-35.9,17.6-46.6c12.3-10.8,25.7-17.6,40.1-20.4c13.4-2.8,22.7-8.4,27.9-16.9s5.4-16.7,0.7-24.8
|
||||
c-2.2-4.4-4.9-8.5-8.2-12.4c-3.3-3.9-6.8-7.4-10.5-10.5c-1.9-1.9-4-3.2-6.3-4c-2.3-0.8-4.5-1.9-6.3-3.5c-1.9-1.9-3.4-4-4.7-6.3
|
||||
c-1.3-2.3-3-4.1-5.2-5.4c-1.9-1.2-4.1-2-6.8-2.3c-2.7-0.3-5.2-0.5-7.7-0.5c-2.8,0.3-5.5,1.1-8,2.3c-2.5,1.3-5,2.7-7.5,4.2
|
||||
c-1.9,1.3-3.7,2.9-5.4,4.9c-1.7,2-3.4,4-4.9,5.9c-1.6,1.3-3.3,2.4-5.2,3.5c-1.9,1.1-3,2.7-3.3,4.9c-0.3,1.3-0.1,2.4,0.7,3.5
|
||||
c0.8,1.1,1.5,2.3,2.1,3.5c5.3-0.6,10.9-1,16.9-1.2c5.9-0.2,12.2-0.1,18.8,0.2c5.3,0.3,10.3,1.6,15,4s5.2,4.6,1.4,6.8
|
||||
c-2.5,1.3-3.9,2.8-4.2,4.7c-0.3,1.9,1.6,2.7,5.6,2.3h9.4c3.8-0.3,6.2,0.9,7.5,3.5c1.2,2.7,0,4.5-3.8,5.4
|
||||
c-8.1,1.6-16.2,2.7-24.1,3.5c-8,0.8-15.9,1-23.7,0.7l0.9,2.3c-3.1,2.5-6.4,4.4-9.8,5.6c-3.4,1.3-7,1.9-10.8,1.9l-47.8-1.4
|
||||
c-2.5-0.3-4.8-0.9-7-1.6c-2.2-0.8-4.2-1.8-6.1-3h-9.4l-2.8-3.3c-9.4,1.6-17.7,1.7-25.1,0.5c-7.3-1.2-9.1-3.4-5.4-6.6l3.8-3.3
|
||||
l-3.3-3.8l-20.6-2.3c-7.5-0.6-10.5-3-9.1-7c1.4-4.1,5.9-5.9,13.4-5.6l37,2.8c3.4,0.3,6-0.9,7.7-3.8c1.7-2.8,4.8-3.8,9.1-2.8
|
||||
c5.6,0.9,11.2,1.6,16.6,1.9c5.5,0.3,10.9,0.2,16.2-0.5c2.5-3.4,5.3-6.6,8.4-9.6c3.1-3,6.4-5.7,9.8-8.2c1.2-0.9,2.7-1.8,4.5-2.6
|
||||
c1.7-0.8,3.4-1.6,4.9-2.6c1.9-0.6,3.8-1.2,5.9-1.9c2-0.6,3.8-1.6,5.4-2.8c1.6-1.6,2.7-3.5,3.3-5.9c0.6-2.3,1.7-4.5,3.3-6.3
|
||||
c1.2-1.2,2.6-2.6,4-4s3-2.4,4.9-3c1.6-0.3,3.2-0.2,4.9,0.5c1.7,0.6,3.4,1.1,4.9,1.4c1.2,0.3,2.5,0.5,3.8,0.7
|
||||
c1.2,0.2,2.5,0.4,3.8,0.7c0.9,0.3,1.9,0.8,3,1.4c1.1,0.6,2.3,1.3,3.5,1.9c0.9,0.3,1.8,0.5,2.6,0.7c0.8,0.2,1.6,0.4,2.6,0.7
|
||||
c0.3,0,0.6,0.2,0.9,0.5l-18.3-15.9c-0.6-0.6-1.6-1.2-2.8-1.6c-1.3-0.5-2.5-0.9-3.8-1.2c-1.9,0-3.8,0.4-5.9,1.2
|
||||
c-2,0.8-4.1,1.2-6.3,1.2c-1.6,0.3-3.3,0.4-5.2,0.2c-1.9-0.2-3.6-0.4-5.2-0.7c-1.9,0-3.6-0.2-5.2-0.5c-1.6-0.3-3.1-0.8-4.7-1.4
|
||||
l-6.1-1.9l9.8-1.9c1.6-0.3,3.3-0.6,5.2-0.9c1.9-0.3,3.1-1.1,3.8-2.3c0.6-0.6,0.9-1.6,0.7-2.8c-0.2-1.2-0.5-2.2-1.2-2.8
|
||||
c-1.3-0.9-2.7-1.2-4.5-0.9c-1.7,0.3-3.2,0.6-4.5,0.9c-1.3,0-2.3,0.3-3,0.9c-0.8,0.6-1.6,1.1-2.6,1.4c-1.9,0.6-3.7,0.9-5.4,0.9
|
||||
c-1.7,0-3.5,0.2-5.4,0.5c-2.5,0.3-4.9,0.8-7.3,1.4c-2.3,0.6-4.8,1.3-7.3,1.9c-2.5,0.3-5.1,0.5-7.7,0.7c-2.7,0.2-5.2,0.2-7.7,0.2
|
||||
c-1.9,0-3.9,0-6.1,0c-2.2,0-4.4-0.2-6.6-0.5c-1.9-0.3-3.7-0.6-5.4-0.9c-1.7-0.3-3.5-0.8-5.4-1.4c-1.6-0.9-3-2-4.5-3.3
|
||||
c-1.4-1.2-3-2.2-4.9-2.8c-1.3-0.6-2.7-1.1-4.2-1.4c-1.6-0.3-3-0.5-4.2-0.5c-3.1-0.6-6.3-0.9-9.4-0.7c-3.1,0.2-6.1,0.1-8.9-0.2
|
||||
c-2.2,0-4.3,0.1-6.3,0.2c-2,0.2-4.1-0.2-6.3-1.2c-0.3,0-0.7-0.2-1.2-0.5c-0.5-0.3-0.7-0.6-0.7-0.9c-0.3-0.9,0-1.7,0.9-2.3
|
||||
c0.9-0.6,1.7-1.2,2.3-1.9c1.6-1.2,3.3-2.1,5.2-2.6s3.8-1,5.6-1.6c1.2-0.3,2.7-0.5,4.2-0.5c1.6,0,3-0.3,4.2-0.9
|
||||
c1.2-0.3,2.4-0.9,3.5-1.6c1.1-0.8,1.6-1.8,1.6-3c0-0.9-0.5-1.6-1.4-2.1s-1.7-0.9-2.3-1.2c-1.9-0.6-3.7-0.9-5.4-0.7
|
||||
c-1.7,0.2-3.5,0.2-5.4,0.2c-5.6-0.3-11.3-0.4-16.9-0.2c-5.6,0.2-11.1,0.2-16.4,0.2c-1.3,0-2.5,0.2-3.8,0.5
|
||||
c-1.3,0.3-2.5,0.3-3.8,0c-1.3-0.3-2.5-0.8-3.8-1.4c-1.3-0.6-2-1.6-2.3-2.8c-0.6-0.9-0.9-1.9-0.7-3c0.2-1.1,0.4-2.1,0.7-3
|
||||
c0.3-0.9,0.9-1.7,1.6-2.3c0.8-0.6,1.2-1.2,1.2-1.9c-0.3-1.2-1.3-2-2.8-2.3c-1.6-0.3-2.7-1.1-3.3-2.3c0-0.9,0.1-1.9,0.2-2.8
|
||||
c0.2-0.9,0.5-1.7,1.2-2.3c0.9-1.2,2.3-2,4.2-2.3c1.9-0.3,3.6-0.6,5.2-0.9c7.2-1.2,14.5-1.7,22-1.4c7.5,0.3,14.8,0.2,22-0.5h2.3
|
||||
c2.2-3.4,6.6-6.3,13.1-8.7s12.7-3.8,18.3-4.5c8.4-1.2,17-1.1,25.8,0.5c8.7,1.6,17.5,1.6,26.3,0c3.8-0.3,7.3-1.3,10.8-3
|
||||
c3.4-1.7,7-2.9,10.8-3.5c3.4-0.9,7-1.8,10.8-2.6c3.8-0.8,7.5-1,11.3-0.7c3.4,0,6.8,0.7,10.1,2.1s6.5,2.3,9.6,2.6
|
||||
c3.4,0.3,6.7,0.2,9.8-0.5c3.1-0.6,6.2-0.9,9.4-0.9c5.6,0.3,11.2,0.5,16.6,0.5c5.5,0,10.5,1.1,15.2,3.3c1.9,0.6,3.8,1.6,5.9,3
|
||||
c2,1.4,2.9,3,2.6,4.9c0,0.9-0.7,1.6-2.1,2.1s-2.7,0.9-4,1.2c-3.1,1.3-6.3,2.1-9.6,2.6s-6.6,1-10.1,1.6c-0.6,0.3-1.3,0.5-1.9,0.5
|
||||
c-0.6,0-1.1,0.3-1.4,0.9c-0.6,0.3-0.9,0.9-0.9,1.6c0,0.8-0.2,1.3-0.5,1.6c-0.9,0.6-1.9,0.9-2.8,0.7c-0.9-0.2-1.9,0.1-2.8,0.7
|
||||
c-0.6,0.3-1.3,0.7-1.9,1.2c-0.6,0.5-0.9,1-0.9,1.6c0,1.3,0.8,2.2,2.3,2.8c1.6,0.6,2.8,1.3,3.8,1.9c0.6,0.6,1.5,1.3,2.6,1.9
|
||||
c1.1,0.6,1.6,1.4,1.6,2.3c0.3,0.6,0.2,1.4-0.2,2.3s-1,1.7-1.6,2.3c-0.9,0.9-2,1.7-3.3,2.3c-1.3,0.6-2.5,1.3-3.8,1.9
|
||||
c-1.6,0.9-3.2,1.8-4.9,2.6c-1.7,0.8-3.5,1.3-5.4,1.6c-1.9,0.6-3.9,0.7-6.1,0.2c-2.2-0.5-4.1-0.2-5.6,0.7
|
||||
c-0.6,0.3-1.3,0.7-1.9,1.2c-0.6,0.5-0.9,1-0.9,1.6c0,0.6,0.3,1.1,0.9,1.4c0.6,0.3,1.2,0.6,1.9,0.9c0.9,0.3,2,0.3,3.3,0
|
||||
c1.2-0.3,2.5-0.3,3.8,0c1.9,0,3.8-0.1,5.6-0.2c1.9-0.2,3.3,0.4,4.2,1.6c0.3,0.3,0.5,0.8,0.5,1.4c0,0.6-0.2,1.1-0.5,1.4
|
||||
c-0.3,0.3-0.9,0.5-1.6,0.5c-0.8,0-1.5,0.2-2.1,0.5c-1.6,0-3.2,0-4.9,0c-1.7,0-3.4,0.2-4.9,0.5c-0.9,0.3-1.9,0.7-2.8,1.2
|
||||
s-1.6,1.2-1.9,2.1c-0.3,0.6-0.2,1.4,0.2,2.3s0.9,1.7,1.2,2.3c0.9,2.2,2.3,4.1,4,5.9c1.7,1.7,3.5,3.4,5.4,4.9
|
||||
c2.2,1.9,4.7,3.3,7.5,4.2s5.3,2.3,7.5,4.2c1.9,1.3,3.7,2.8,5.4,4.7c1.7,1.9,3.4,3.8,4.9,5.6c2.5,2.8,4.8,5.7,6.8,8.7
|
||||
c2,3,4.1,6,6.3,9.1c1.9,2.5,4.1,5,6.6,7.5c2.5,2.5,4.7,5.3,6.6,8.4c0.6,1.6,1.2,3,1.9,4.5c0.6,1.4,1.2,3,1.9,4.9
|
||||
c0-11.3,1.6-21.4,4.9-30.5c3.3-9.1,11.5-15,24.6-17.8c-1.3-0.9-2.7-1.7-4.5-2.3c-1.7-0.6-3.5-1.1-5.4-1.4c-2.2-0.6-4.5-0.7-7-0.2
|
||||
c-2.5,0.5-5,0.7-7.5,0.7c-2.8-0.3-5.7-0.4-8.7-0.2c-3,0.2-5.7-0.2-8.2-1.2c-2.5-0.6-5.1-1.5-7.7-2.6c-2.7-1.1-4.6-2.7-5.9-4.9
|
||||
c-0.9-1.9-1.3-4-0.9-6.3c0.3-2.3,1.1-4.5,2.3-6.3c1.6-2.2,3.8-3.8,6.6-4.7s5.6-1.7,8.4-2.3c3.4-0.9,6.9-1.5,10.3-1.6
|
||||
c3.4-0.2,7-0.4,10.8-0.7c2.8-0.3,5.6-0.7,8.4-1.2s5.5-1,8-1.6c2.8-0.6,5.4-1.4,7.7-2.3s4.8-1.9,7.3-2.8c3.4-0.9,6.8-1.7,10.1-2.3
|
||||
c3.3-0.6,6.6-1.2,10.1-1.9c3.8-0.3,7.7-0.4,11.7-0.2c4.1,0.2,8,0.2,11.7,0.2c1.9,0,3.7,0.2,5.4,0.5c1.7,0.3,3.4,0.5,4.9,0.5
|
||||
l18.8-1.4c1.9,0,3.8,0.5,5.9,1.4c2,0.9,3.4,2.2,4,3.8c0.3,0.6,0.3,1.4,0,2.3c-0.3,0.9-0.8,1.7-1.4,2.3c-0.3,0.6-0.8,1.2-1.4,1.6
|
||||
c-0.6,0.5-1.4,0.7-2.3,0.7c-0.9,0.3-1.8,0.2-2.6-0.5c-0.8-0.6-1.8-0.9-3-0.9h-9.4c-1.6,0-3,0.2-4.5,0.5c-1.4,0.3-2.9,0.8-4.5,1.4
|
||||
c-1.3,0.6-2.8,1.6-4.7,2.8c-1.9,1.3-2.7,2.7-2.3,4.2c0.3,1.9,1.5,3.1,3.5,3.8c2,0.6,4,0.9,5.9,0.9l49.2-0.9
|
||||
c1.9-0.3,3.8-0.4,5.9-0.2c2,0.2,4,0.5,5.9,1.2c0.9,0.6,1.9,1.2,2.8,1.6s1.6,1.2,1.9,2.1c0.3,0.9,0.3,1.9,0,2.8
|
||||
c-0.3,0.9-0.8,1.7-1.4,2.3c-1.6,1.3-3.5,1.3-5.9,0c-2.3-1.2-4.5-1.6-6.3-0.9c-0.6,0.3-1.2,0.8-1.6,1.4c-0.5,0.6-1,1.1-1.6,1.4
|
||||
c-1.9,0.3-3.8,0.2-5.6-0.5c-1.9-0.6-3.8-0.8-5.6-0.5c-0.3,0.3-0.8,0.5-1.4,0.7c-0.6,0.2-0.9,0.4-0.9,0.7c0,0.9,0.5,1.5,1.4,1.6
|
||||
c0.9,0.2,1.9,0.4,2.8,0.7c0.6,0,1.3-0.1,2.1-0.2c0.8-0.2,1.6-0.2,2.6-0.2c1.2,0.6,2.4,1.4,3.5,2.3c1.1,0.9,2.1,1.9,3,2.8
|
||||
c0.9,1.6,1.6,3.5,1.9,5.9c0.3,2.3,1.2,4.1,2.8,5.4c0.9,0.6,2,1,3.3,1.2c1.2,0.2,2.3,0.1,3.3-0.2c1.6,0,3-0.5,4.2-1.4
|
||||
c1.2-0.9,2.5-1.2,3.8-0.9c2.5,0,5.2,1,8,3c2.8,2,4.2,4.5,4.2,7.3c0,1.9-1.3,3.2-4,4c-2.7,0.8-5.1,1-7.3,0.7
|
||||
c-6.6,0.3-12.3,1.3-17.1,3c-4.8,1.7-8.8,4.5-12,8.2c0,0.3,0.1,0.6,0.2,0.9c0.2,0.3,0.4,0.5,0.7,0.5c0.3,0.3,0.7,0.4,1.2,0.2
|
||||
c0.5-0.2,0.9-0.2,1.2-0.2c0.9-0.3,1.7-0.5,2.3-0.5c0.6,0,1.4,0,2.3,0s1.9,0.1,2.8,0.2c0.9,0.2,1.7,0.5,2.3,1.2
|
||||
c0.3,0.6,0.4,1.4,0.2,2.3c-0.2,0.9-0.4,1.7-0.7,2.3c-0.6,0.9-1.6,1.6-2.8,1.9c-1.3,0.3-2.3,0.6-3.3,0.9c-2.2,0.6-4.5,1.3-7,1.9
|
||||
c-2.5,0.6-4.8,1.1-7,1.4c-2.2,0.3-4.4,0.5-6.6,0.7c-2.2,0.2-4.4,0.4-6.6,0.7c-1.3,0-2.5,0.1-3.8,0.2c-1.3,0.2-2.7,0.2-4.2,0.2
|
||||
c-4.1,0-8.2-0.4-12.4-1.2c-4.2-0.8-8.4-1.3-12.4-1.6c-6.6-0.6-13.2-0.9-19.9-0.7c-6.7,0.2-13.4-0.4-19.9-1.6
|
||||
c-1.6-0.3-3.3-0.6-5.2-0.9c-1.9-0.3-3.6-0.9-5.2-1.9c-0.3-0.3-0.6-0.7-0.9-1.2c-0.3-0.5-0.3-0.9,0-1.2c0.6-1.2,1.9-1.6,3.8-0.9
|
||||
c1.9,0.6,3.4,0.6,4.7,0c0.3-0.3,0.6-0.6,0.9-0.9c0.3-0.3,0.5-0.6,0.5-0.9c-0.3-1.2-1.3-1.9-3-1.9c-1.7,0-3.2-0.2-4.5-0.5
|
||||
c-1.6-0.3-3-0.4-4.5-0.2c-1.4,0.2-2.7-0.1-4-0.7c-0.9-0.6-1.9-1.3-2.8-2.1c-0.9-0.8-1.3-1.6-0.9-2.6c0-0.6,0.5-1.2,1.4-1.6
|
||||
s1.7-0.9,2.3-1.2c1.2-0.9,2.7-1.6,4.5-1.9c1.7-0.3,2.9-1.2,3.5-2.8c-9.4-0.6-16.5,2.3-21.3,8.7c-4.8,6.4-6,15.4-3.5,27
|
||||
c4.4,20,0.9,36.9-10.3,50.6c-11.3,13.8-22.8,21.6-34.7,23.4c-24.7,4.1-38.8,11.3-42.2,21.6c-3.4,10.3,4.2,25.8,23,46.4l0.9-0.5
|
||||
c-4.1-6.6-6.3-12.2-6.6-16.9c-0.3-4.7,1.2-7.2,4.7-7.5c17.2-0.9,34.9-1.2,53.2-0.9c18.3,0.3,37.3,1.7,57,4.2
|
||||
c1.2,14.1-1.7,24.3-8.9,30.7c-7.2,6.4-17.7,9.8-31.4,10.1c1.2,15.3-6.6,26.3-23.7,32.8c-17,6.6-40.7,10.5-71,11.7
|
||||
c-30.3,1.3-54.4-3-72.2-12.7c-17.8-9.7-21.1-20.9-9.8-33.8C124.3,391.8,111.9,389.4,103.9,383.6z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Maho" class="st0">
|
||||
<g class="st1">
|
||||
<path class="st14" d="M150.5,404l3.3-1.9v-2.8l-0.9-0.9v-7.5l15.5-6.1l2.8-3.8l-3.3-4.2l-7-1.9l-5.2,6.6l1.4-7L146.3,388
|
||||
l2.8-12.7l-6.1,6.6l0.9-8.9l-4.7,6.1h-2.8l-6.6,10.3c1.9-4.7,3.5-9.4,4.9-14.3c1.4-4.8,2.4-9.6,3-14.3l-4.2-0.5l-4.7,3.8
|
||||
l-0.5-4.2c-6.3,3.4-11.9,8.5-16.9,15.2c-5,6.7-10.2,13.4-15.5,19.9c3.1-5.3,6.5-10.7,10.1-16.2c3.6-5.5,7.6-10.9,12-16.2
|
||||
l-4.7,0.5l1.4-4.7c-5.6,3.8-10.8,8.1-15.5,13.1c-4.7,5-7.8,11.7-9.4,20.2c-0.3-3.1-0.5-6.2-0.5-9.1c0-3,0.2-6,0.5-9.1l-3.3-2.3
|
||||
l-3.3,2.8c-0.6-2.8-0.2-5.7,1.2-8.7c1.4-3,3.5-5.9,6.3-8.7c-3.1-5.9-6.8-10.3-11-13.1s-8.7-4.8-13.4-6.1c4.1-2.2,6-4.6,5.9-7.3
|
||||
c-0.2-2.7-1.5-5.5-4-8.7c-2.5-2.2-4.7-4.6-6.6-7.3c-1.9-2.7-3.8-5.4-5.6-8.2l8.4-8.9c-8.1-9.7-13.6-18.7-16.4-27
|
||||
c-2.8-8.3-3.4-15.7-1.9-22.3c10,11.9,20.8,22.9,32.3,33c11.6,10.2,25,18.4,40.3,24.6c7.2,2.2,12.4,2,15.7-0.7
|
||||
c3.3-2.7,4.6-7.6,4-14.8l-29.5-82.5c-3.4-10.3-4.4-21-2.8-32.1c1.6-11.1,6.6-21.3,15-30.7l30.9-33.3l-2.3,7
|
||||
c10.6-5,18-14.3,22.3-27.9s6.6-27.1,7.3-40.5l1.9-5.2c1.2,14.4,0.3,28.4-2.8,42.2c-3.1,13.8-10,26.9-20.6,39.4l9.8-8.4
|
||||
l-26.3,37.5c-5.3,6.9-8.8,14.5-10.3,22.7c-1.6,8.3-0.6,17.4,2.8,27.4c4.1,15.9,9.7,31.1,16.9,45.5c7.2,14.4,15.6,28.1,25.3,41.3
|
||||
c2.2-2.5,4.4-3.6,6.6-3.3c2.2,0.3,4.5,1.9,7,4.7c1.2-2.8,1.5-6.5,0.7-11c-0.8-4.5-1.8-9.1-3-13.8l8,18.8l-1.4-9.4l10.8,22h2.8
|
||||
l6.1,8l3.3-6.6l9.8,0.9l0.5-3.3l2.8,3.3l-0.5-7l2.8-2.3l1.9,2.8l-7-47.3c-2.2-17.2-3.1-27.7-2.8-31.6c0.3-3.9,1.9-10.7,4.7-20.4
|
||||
l12.2-36.6l9.8-2.8l0.9,9.4l-8.9,49.2c-1.3,5.9-2.1,11.8-2.6,17.6c-0.5,5.8-0.1,12,1.2,18.5l15.9,52.5l2.3-3.3l1.4,5.6l8.4-3.8
|
||||
l0.5,5.6l7,0.5c0.6-2.2,1.4-4.3,2.3-6.3c0.9-2,2-4,3.3-5.9l1.4,8.4l2.8,1.9l1.9,1.9l0.5-4.2l2.8-0.9c0.9-5.3,2.3-10.6,4.2-15.9
|
||||
c1.9-5.3,3.9-10.5,6.1-15.5c-1.3,3.8-2.3,7.6-3.3,11.5c-0.9,3.9-1.6,7.7-1.9,11.5l3.3-0.9c0-3.8,0.6-7.3,1.9-10.5
|
||||
c1.2-3.3,2.7-6.5,4.2-9.6c-0.6,3.1-1.2,6.3-1.6,9.4c-0.5,3.1-0.4,6.3,0.2,9.4h2.8l5.2,4.2h3.3c6.6-8.7,13.4-20.8,20.4-36.1
|
||||
c7-15.3,14.1-33.6,21.3-54.8c4.1-11.3,5.2-22.1,3.3-32.6c-1.9-10.5-4.8-20.7-8.9-30.7c-7.8-15.3-17.3-28.8-28.6-40.5
|
||||
S309.6,68,313.7,33.6c-0.6,12.2,0.6,23.5,3.8,34c3.1,10.5,9.5,19.8,19.2,27.9l-9.8-22l52,68c6.2,11.6,10.1,23.7,11.5,36.3
|
||||
s-0.9,26.6-6.8,42c-5,15-10.1,30.1-15.2,45.2c-5.2,15.2-8.7,29.3-10.5,42.4c19.4-4.4,37.9-13.3,55.5-26.7
|
||||
c17.7-13.4,34.6-30.3,50.9-50.6l-6.6,17.3l5.6-8l3.3,5.2c0.6,4.7-1.6,12-6.8,21.8s-6.3,18-3.5,24.6c-7.2,3.4-12.1,8.3-14.8,14.5
|
||||
c-2.7,6.3-1.3,15.2,4,26.7c1.6,3.8,2.9,7.5,4,11.3c1.1,3.8,1.3,7.7,0.7,11.7c-1.3-3.4-2.8-6.2-4.7-8.4c-1.9-2.2-4.4-3.8-7.5-4.7
|
||||
l-1.4,20.2c-1.3-1.6-2.5-2.9-3.8-4c-1.3-1.1-2.7-1.9-4.2-2.6l-2.8,5.6l-4.2-4.7l-1.9,0.9l7,8l-4.7,0.5l3.3,6.6l-4.7-3.8l-2.8,1.4
|
||||
v4.7l-4.2-4.2l-5.2-0.5c1.9,3.1,3.4,6.3,4.7,9.6c1.2,3.3,1.9,6.5,1.9,9.6c-1.9-5-4-9.3-6.3-12.9c-2.3-3.6-4.9-6.6-7.7-9.1
|
||||
c0.9,5.6,2,11.1,3.3,16.4c1.2,5.3,2.5,10.8,3.8,16.4c-3.4-9.7-7.7-18-12.7-25.1c-5-7-10.9-12.4-17.8-16.2l8.9,10.3l-6.6-4.2
|
||||
l0.5,2.8c2.5,2.8,5.1,5.7,7.7,8.7c2.7,3,5.4,6.2,8.2,9.6c-3.1-2.8-6.2-5.5-9.1-8.2c-3-2.7-6-5.4-9.1-8.2l0.9,4.2
|
||||
c-2.2-1.9-4.5-3.7-6.8-5.4c-2.3-1.7-4.6-3.2-6.8-4.5c6.6,8.8,11.6,16.7,15.2,23.9c3.6,7.2,5.9,13.9,6.8,20.2
|
||||
c-4.1-8.7-8.3-16.6-12.7-23.4c-4.4-6.9-8.9-13-13.6-18.3l-5.2,2.8l12.2,23.4l-5.6-4.2l-0.9,3.3l-1.4-8l-3.3-2.3l-1.9,3.3
|
||||
l-1.9-2.8l-8.9-9.4l6.1,12.7l-10.8-9.4l8.9,18.3l-15-21.1l-1.4,4.7l7,8.9v3.3l-2.8,6.1l3.8,2.3v6.6c-1.9,5.6-4.2,10.8-7,15.5
|
||||
s-5.6,9.2-8.4,13.6l-2.3,2.3l-1.9,4.7c-12.5,7.5-25,14.8-37.5,22c-12.5,7.2-23.4,14.1-32.8,20.6c-16.9-9.4-35.3-18.7-55.3-27.9
|
||||
c-20-9.2-34.5-24.3-43.6-45.2L150.5,404z M216.2,346.1c2.2-0.5,4.8-0.5,8-0.2c-13.4-12.5-25.2-21-35.4-25.5
|
||||
c-10.2-4.5-17.6-2.4-22.3,6.3c7.2,11.3,14.5,19.1,21.8,23.4c7.3,4.4,14.6,3.9,21.8-1.4C211.9,347.4,214,346.5,216.2,346.1z
|
||||
M317.4,338.3c1.9-1.9,3.4-3.7,4.5-5.4c1.1-1.7,1.3-3.4,0.7-4.9c-4.4-5.6-15.3-5.9-32.8-0.7c-17.5,5.2-26.3,12.1-26.3,20.9
|
||||
l23,14.1c5.3-1.6,10.7-4.1,16.2-7.5c5.5-3.4,11-7.3,16.6-11.7L317.4,338.3z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Ninjutsu" class="st0">
|
||||
<g class="st1">
|
||||
<path d="M218,332.7v-0.9l-0.5-0.5c-13.4,8.4-27.3,15.5-41.7,21.1c-14.7,5.3-29.8,9.4-45.5,12.2c-15.6,2.8-31.7,4.5-48.3,5.2
|
||||
c-16.6,0.6-33.6,0.3-51.1-0.9c7.8-12.2,16.2-24.1,25.3-35.6c9.1-11.6,19.3-22.6,30.7-33c11.4-10.5,24-20.2,37.7-29.3
|
||||
c13.7-9.1,29.2-17.3,46.4-24.8l10.8-25.3h0.9l0.5-0.5c-8.4-13.4-15.5-27.3-21.1-41.7c-5.3-14.7-9.4-29.8-12.2-45.5
|
||||
c-2.8-15.6-4.5-31.7-5.2-48.3c-0.6-16.6-0.3-33.6,0.9-51.1c12.2,7.8,24.1,16.3,35.6,25.3c11.6,9.1,22.6,19.3,33,30.7
|
||||
c10.5,11.4,20.2,24,29.3,37.7c9.1,13.8,17.3,29.2,24.8,46.4l25.3,10.8v0.9l0.5,0.5c13.4-8.4,27.3-15.5,41.7-21.1
|
||||
c14.7-5.3,29.8-9.4,45.5-12.2c15.6-2.8,31.7-4.5,48.3-5.2c16.6-0.6,33.6-0.3,51.1,0.9c-7.8,12.2-16.3,24.1-25.3,35.6
|
||||
c-9.1,11.6-19.3,22.6-30.7,33c-11.4,10.5-24,20.2-37.7,29.3c-13.8,9.1-29.2,17.3-46.4,24.8l-10.8,25.3h-0.9l-0.5,0.5
|
||||
c8.4,13.4,15.5,27.3,21.1,41.7c5.3,14.7,9.4,29.8,12.2,45.5c2.8,15.6,4.5,31.7,5.2,48.3c0.6,16.6,0.3,33.6-0.9,51.1
|
||||
c-12.2-7.8-24.1-16.2-35.6-25.3c-11.6-9.1-22.6-19.3-33-30.7c-10.5-11.4-20.2-24-29.3-37.7c-9.1-13.7-17.3-29.2-24.8-46.4
|
||||
L218,332.7z M296.3,258.6c0-11.3-3.9-20.8-11.7-28.6c-7.8-7.8-17.3-11.7-28.6-11.7s-20.8,3.9-28.6,11.7
|
||||
c-7.8,7.8-11.7,17.3-11.7,28.6s3.9,20.8,11.7,28.6c7.8,7.8,17.3,11.7,28.6,11.7s20.8-3.9,28.6-11.7
|
||||
C292.4,279.4,296.3,269.9,296.3,258.6z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="unknow" class="st0">
|
||||
<g class="st1">
|
||||
<path d="M176.3,350.1c-15.6-11.3-31.3-21.8-46.9-31.6c-15.6-9.8-31.3-19-46.9-27.4c-15.9-8.4-31.7-16.4-47.3-23.9
|
||||
c-2.5-1.9-3.8-3.8-4-5.9c-0.2-2,1-4.3,3.5-6.8c16.6-7.5,33.4-16.9,50.6-28.1c17.2-10.9,34.8-22.7,53-35.2
|
||||
c18.1-12.5,36.6-25.2,55.3-38c19.1-12.5,38.4-24.2,58.1-35.2c15,14.1,31.9,26.7,50.6,38s38.3,22.3,58.6,33
|
||||
c20.3,10.8,40.8,22.1,61.4,34c20.3,11.6,39.8,24.8,58.6,39.8c-15.9,10-32,19.8-48.3,29.5c-15.9,9.4-31.8,18.8-47.6,28.4
|
||||
c-15.8,9.5-31.3,19.3-46.6,29.3c-15.3,10-30.3,20.8-45,32.3c-10.9,9.4-22.2,14.8-33.8,16.4c-11.6,1.6-23.6-2.5-36.1-12.2
|
||||
C207.7,373.8,191.9,361.6,176.3,350.1z M368.5,214.1c-13.8-7.8-27.3-15.9-40.5-24.1c-13.3-8.3-26.3-16.8-39.1-25.5
|
||||
c-13.1-8.4-26.1-17.3-38.9-26.7c-14.7,9.1-28.8,18.3-42.2,27.7c-13.8,9.1-27,18.2-39.8,27.4c-12.8,9.2-25.2,18.5-37,27.9
|
||||
c-11.6,9.1-22.8,18.3-33.8,27.7c13.4,6.9,26.9,14.1,40.3,21.6c13.1,7.8,26.3,15.7,39.4,23.7s26.1,16.2,38.9,24.6
|
||||
c13.1,8.8,25.9,17.5,38.4,26.3c11.6-9.4,23.6-18.6,36.1-27.7c12.2-9.4,24.8-18.5,37.7-27.4c13-8.9,26.2-17.7,39.6-26.5
|
||||
c13.4-8.7,27.3-17.5,41.7-26.3C395.5,229.4,381.9,221.9,368.5,214.1z M160.4,244.1c14.7-12.2,29.9-22.2,45.7-30
|
||||
c15.8-7.8,30.9-18.9,45.2-33.3c12.5,9.1,25.5,17.7,38.9,26c13.4,8.3,27.5,16.3,42.2,24.1c1.9,1.3,3.4,2.8,4.7,4.7
|
||||
c1.2,1.9,1.2,4.8,0,8.9c-19.1,4.1-35,12.6-47.8,25.5c-12.8,13-25.9,23.7-39.4,32.1c-8.8-12.2-21.1-22.9-37-32.1
|
||||
C196.9,260.9,179.4,252.2,160.4,244.1z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Rituals" class="st0">
|
||||
<g class="st1">
|
||||
<path class="st15" d="M115.1,440.3c9.5-9.5,13.7-20.7,12.4-33.5c-6.3-5.3-11.4-11.2-15.5-17.6c-4.1-6.4-6.6-13.5-7.5-21.3
|
||||
c-8.4-2.8-16-6.6-22.7-11.3c-6.7-4.7-12.9-10.3-18.5-16.9V313c6.9-8.1,15.4-14.3,25.5-18.5c10.2-4.2,21-7.4,32.6-9.6
|
||||
c9.7-16.6,22.1-28.4,37.3-35.4c15.2-7,30.9-11.5,47.1-13.4L146.3,98.3c10,0.3,18,2,24.1,5.2c6.1,3.1,9.1,8.4,9.1,15.9l36.6,115.8
|
||||
c6.9-0.6,13.5-1,19.9-1.2c6.4-0.2,12.6-0.2,18.5-0.2l-6.1-200.2c10.9,2.2,19,5.8,24.1,10.8c5.2,5,6.6,11.7,4.5,20.2l-11.7,169.2
|
||||
c4.7,0,9.4,0.1,14.1,0.2c4.7,0.2,9.4,0.4,14.1,0.7l35.2-112.5c-0.6-8.1,2.1-13.9,8.2-17.3c6.1-3.4,14.3-5.5,24.6-6.1l-58.6,136.9
|
||||
c16.6,1.9,32.8,6.3,48.8,13.1c15.9,6.9,28.9,18.9,38.9,36.1c11.9,2.2,22.9,5.4,33,9.6c10.2,4.2,18.7,10.4,25.5,18.5v26.7
|
||||
c-5.6,6.6-11.9,12.2-18.8,16.9c-6.9,4.7-14.5,8.4-23,11.3c-0.9,7.8-3.4,14.9-7.3,21.3c-3.9,6.4-9.1,12.3-15.7,17.6
|
||||
c-0.9,12.8,3.3,24,12.7,33.5c9.4,9.5,23.1,17.6,41.3,24.1c-9.4,16.6-24.8,22.3-46.2,17.1c-21.4-5.2-34.5-24.3-39.1-57.4
|
||||
c-14.1,5.6-29.5,9.8-46.4,12.4c-16.9,2.7-33.8,4-50.6,4c-16.6,0-33.4-1.3-50.4-4c-17-2.7-32.6-6.8-46.6-12.4
|
||||
c-4.7,33.1-17.7,52.3-38.9,57.4c-21.3,5.2-36.7-0.5-46.4-17.1C91.8,457.9,105.6,449.8,115.1,440.3z M361.5,272.9
|
||||
c-15.9-10.2-38-16.8-66.1-19.9l-11.7,27.2l-3.3-2.8l8-24.8c-4.1-0.3-8-0.6-12-0.9c-3.9-0.3-7.9-0.5-12-0.5l-1.9,24.8l-6.6,7.5
|
||||
l-0.9-32.3c-5.9,0-11.6,0.2-17.1,0.5c-5.5,0.3-10.9,0.6-16.2,0.9l8,24.8l-4.2,5.2l-12.2-29.1c-27.2,3.4-48.4,10.2-63.5,20.4
|
||||
c-15.2,10.2-22.7,23.5-22.7,40.1c0,7.5,4.2,13.3,12.7,17.3c8.4,4.1,19,7.1,31.6,9.1c12.7,2,26.6,3.4,42,4
|
||||
c15,0.3,29.2,0.6,42.7,0.9c13.4-0.3,27.8-0.6,43.1-0.9c15-0.6,28.9-1.9,41.7-4c12.8-2,23.4-5.1,31.9-9.1
|
||||
c8.4-4.1,12.7-9.8,12.7-17.3C385.4,296.8,377.4,283.1,361.5,272.9z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Shujis" class="st0">
|
||||
<g class="st1">
|
||||
<path class="st13" d="M99.2,415.7c-2.3-2.2-4.8-3.9-7.3-5.2c-34.1-19.1-53.8-55.2-59.1-108.3c-5.6-52.8,2.7-102.1,24.8-147.9
|
||||
c22.2-45.8,58-77.9,107.3-96.3c49.4-18.1,111.9-2.2,187.5,47.8c-46.3-20.3-89.1-26.4-128.4-18.3c-39.4,8.1-69.6,24.2-90.7,48.3
|
||||
c-21.1,24.1-30.1,53-27,86.7c3.4,33.8,24.5,65.9,63.3,96.6c7.2,5.3,12.1,12.9,14.8,22.7c2.7,9.8,3.8,19.1,3.5,27.9
|
||||
c0,6.3-1.3,12.4-4,18.5c-2.7,6.1-6,11.5-10.1,16.2c-4.1,4.7-8.9,8.6-14.5,11.7c-5.6,3.1-11.4,5.5-17.3,7
|
||||
c-5.6,1.3-11.5,1.6-17.6,0.9c-6.1-0.6-12-1.9-17.6-3.8C104.1,419.4,101.5,417.9,99.2,415.7z M191.1,442.6
|
||||
c17.3-9.2,28.5-28.4,33.5-57.4c-5,8.4-9.7,14.8-14.1,19c-4.4,4.2-8.6,7.9-12.7,11c9.1-11.6,16.9-23.7,23.4-36.6
|
||||
c6.6-12.8,12.8-24.6,18.8-35.4c5.9-10.8,12-19.8,18.3-27c6.6-7.5,14.4-11.4,23.4-11.7l40.8,38v35.6c-4.1,8.8-8.9,16.4-14.5,23
|
||||
s-12,11.9-19.2,15.9c-8.8,13.8-18.9,24.4-30.5,31.9c-11.3,7.2-23.8,11.8-37.7,13.8c-13.9,2-28.7,1.8-44.3-0.7
|
||||
c-15.9-2.5-32.5-6.6-49.7-12.2C152.2,454.3,173.7,451.9,191.1,442.6z M297.3,269.9c12.8-19.1,25.3-34.8,37.5-47.3
|
||||
c11.9-12.8,24.1-25.9,36.6-39.4c12.5-13.4,25.6-29.2,39.4-47.3c13.7-17.8,28.6-41.7,44.5-71.7l11.7,1.9l0.5,14.1l5.2,0.9
|
||||
l-0.5,11.3L481,103l-6.1,7.5l-0.5,14.1c-11.3,11.3-21.7,25-31.4,41.3c-9.7,16.3-19.1,33.2-28.4,50.9
|
||||
c-9.2,17.7-18.4,35.1-27.4,52.3c-9.1,17.5-18.6,33.1-28.6,46.9L297.3,269.9z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Invocations">
|
||||
<g>
|
||||
<path class="st16" d="M122.9,85.7c-0.3-1.9,0.5-3.8,2.6-5.6c2-1.9,4.9-3.8,8.7-5.6c1.2,4.7,6.6,8,15.9,9.8s20.3,1.9,32.8,0
|
||||
c12.8-1.9,23.4-5.2,31.9-10.1c8.4-4.8,12.3-9.6,11.7-14.3v-0.5c3.4,0.6,6.3,1.6,8.7,3s3.7,3,4,4.9l28.6,140.2h21.6l-30-144.8
|
||||
c0.6-0.3,1.2-0.6,1.9-0.9c0.6-0.3,1.1-0.6,1.4-0.9l0.9-4.2c-0.3-2.2,1.5-4.4,5.4-6.6c3.9-2.2,8.8-3.8,14.8-4.7
|
||||
c5.9-0.6,11.1-0.5,15.5,0.5c4.4,0.9,6.7,2.5,7,4.7l2.3,3.3c0.6,0,1.4,0.2,2.3,0.5c0.9,0.3,1.7,0.6,2.3,0.9l37.5,180.5
|
||||
c-6.3,9.4-18,17.3-35.2,23.9c-17.2,6.9-35.7,11.8-55.5,14.8c-19.8,3-39.1,3.8-57.9,2.6c-18.4-1.2-32.2-5.3-41.3-12.2L122.9,85.7z
|
||||
M151.5,63.9c-8.1-1.7-12.5-4.6-13.1-8.7c-0.6-4.1,2.7-8,9.8-12c7.2-3.9,16.2-6.8,27.2-8.7c10.6-1.6,20-1.5,28.1,0.2
|
||||
c8.1,1.7,12.5,4.6,13.1,8.7c0.6,4.1-2.7,8.1-9.8,12.2c-7.2,4.1-16.3,6.9-27.2,8.4C169,65.7,159.6,65.6,151.5,63.9z M197.9,145.7
|
||||
c-9.1,1.3-17.7,1.7-25.8,1.4c-8.1-0.3-15.8-1.4-23-3.3l25.3,113c6.2,3.1,13.4,5.2,21.6,6.3c8.1,1.1,17,1.3,26.7,0.7L197.9,145.7z
|
||||
M339.4,432.6c-0.6,0-1.3-0.2-1.9-0.5c-0.6-0.3-1.4-0.6-2.3-0.9L311.8,321c-3.1,1.6-6.4,2.8-9.8,3.8c-3.4,0.9-6.7,1.6-9.8,1.9
|
||||
l22,106.9c1.2,6.6-3.8,12.3-15,17.3c-10.9,4.7-23.5,8-37.7,10.1c-14.2,2-27.6,2.6-40.1,1.6c-12.5-0.9-19.2-3.9-20.2-8.9
|
||||
l-32.8-153.8c9.1,6.9,22.8,10.9,41.3,12.2c18.4,1.3,37.6,0.4,57.4-2.6c19.8-3,38.4-7.9,55.5-14.8c17.2-6.6,29.1-14.4,35.6-23.4
|
||||
l0.9,5.6h1.9l28.6,134.5l-3.3,1.4l2.8,10.3c-0.9,0.6-1.8,1.3-2.6,1.9c-0.8,0.6-1.6,1.3-2.6,1.9l0.9,4.2c0.9,5-6,8.4-20.9,10.1
|
||||
c-14.8,1.7-22.7,0.1-23.7-4.9L339.4,432.6z M258.8,434l-21.1-99.4c-9.4,0-18.4-0.7-27-2.1c-8.6-1.4-17-3.7-25.1-6.8l23.9,107.8
|
||||
c8.4,1.9,16.7,2.8,24.8,2.8C242.6,436.3,250.7,435.5,258.8,434z M217.6,470.1c13.4,3.4,27.5,4.2,42.2,2.3
|
||||
c14.7-1.9,30.2-6.9,46.4-15c0.6,2.2,0.8,4.1,0.5,5.6c-0.3,1.6-1.3,3-2.8,4.2c-18.8,13.7-37.3,19.1-55.8,16.2
|
||||
c-18.4-3-28.6-5.6-30.5-7.7V470.1z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Katas" class="st0">
|
||||
<g class="st1">
|
||||
<path class="st17" d="M376,478.5l-14.1-30.9l-6.1,2.3l-72.7-96.1L263,369.3c-7.2,5.3-16.2,7.3-27,6.1c-10.8-1.2-19.5-5-26-11.3
|
||||
l-29.5-28.6l-50.6-1.9l26.3-30.5c4.1-4.7,10.1-7.4,18-8.2c8-0.8,14.1,0.9,18.5,4.9l42.2,37.5l23-18.8L92.9,89.4L82.6,33.6
|
||||
L133.2,59l175.3,221.7l24.4-16.9L308,212.7c-2.5-5.3-2.3-11.6,0.7-19c3-7.3,7.3-12.4,12.9-15.2l36.6-16.9L346,210.8l19.2,36.6
|
||||
c4.4,7.8,5.6,17.1,3.8,27.9s-6.3,18.8-13.1,24.1l-20.2,15l0.5,0.9l71.3,95.6l-3.8,5.2l25.8,22l-2.3,27.2l-24.4,18.3L376,478.5z"
|
||||
/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Clans" class="st0">
|
||||
<g id="Imperial" class="st1">
|
||||
<rect y="18.6" class="st18" width="512" height="493.4"/>
|
||||
<text transform="matrix(1 0 0 1 16 468.6476)" class="st19 st4 st5"></text>
|
||||
</g>
|
||||
<g id="Unicorn">
|
||||
<rect y="18.6" class="st3" width="512" height="493.4"/>
|
||||
<text transform="matrix(1 0 0 1 16 468.6476)" class="st20 st4 st5"></text>
|
||||
</g>
|
||||
<g id="Torttle">
|
||||
<rect y="18.6" class="st3" width="512" height="493.4"/>
|
||||
<text transform="matrix(1 0 0 1 16 468.6476)" class="st1 st4 st5"></text>
|
||||
</g>
|
||||
<g id="Scorpion">
|
||||
<rect y="18.6" class="st3" width="512" height="493.4"/>
|
||||
<text transform="matrix(1 0 0 1 16 468.6476)" class="st21 st4 st5"></text>
|
||||
</g>
|
||||
<g id="Phoenix">
|
||||
<rect y="18.6" class="st3" width="512" height="493.4"/>
|
||||
<text transform="matrix(1 0 0 1 16 468.6476)" class="st22 st4 st5"></text>
|
||||
</g>
|
||||
<g id="Mantis">
|
||||
<rect y="18.6" class="st3" width="512" height="493.4"/>
|
||||
<text transform="matrix(1 0 0 1 16 468.6476)" class="st23 st4 st5"></text>
|
||||
</g>
|
||||
<g id="Lion">
|
||||
<rect y="18.6" class="st3" width="512" height="493.4"/>
|
||||
<text transform="matrix(1 0 0 1 16 468.6476)" class="st24 st4 st5"></text>
|
||||
</g>
|
||||
<g id="Dragon">
|
||||
<rect y="18.6" class="st3" width="512" height="493.4"/>
|
||||
<text transform="matrix(1 0 0 1 16 468.6476)" class="st25 st4 st5"></text>
|
||||
</g>
|
||||
<g id="Crab">
|
||||
<rect y="18.6" class="st3" width="512" height="493.4"/>
|
||||
<text transform="matrix(1 0 0 1 16 468.6476)" class="st26 st4 st5"></text>
|
||||
</g>
|
||||
<g id="Crane">
|
||||
<rect y="18.6" class="st3" width="512" height="493.4"/>
|
||||
<text transform="matrix(1 0 0 1 16 468.6476)" class="st27 st4 st5"></text>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 48 KiB |
2
system/assets/icons/items/title.svg
Normal file
2
system/assets/icons/items/title.svg
Normal file
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<svg id="filled_outline" height="512" viewBox="0 0 512 512" width="512" xmlns="http://www.w3.org/2000/svg" data-name="filled outline"><path d="m256 24v97.786h56v-65.786c0-17.673-25.072-32-56-32z" fill="#74a2b7"/><path d="m256 88c-30.928 0-56-14.327-56-32v400c0 17.673 25.072 32 56 32s56-14.327 56-32v-400c0 17.673-25.072 32-56 32z" fill="#dceaef"/><path d="m232 456v-371.084c-18.918-5.136-32-16.151-32-28.916v400c0 17.673 25.072 32 56 32a95.522 95.522 0 0 0 16-1.333c-23.129-3.935-40-16.167-40-30.667z" fill="#74a2b7"/><path d="m312 352-88-88h88z" fill="#74a2b7"/><path d="m200 240-88 88h40v48l104-104 104 104v-48h40l-88-88z" fill="#d32668"/><path d="m353.307 224.7-22.751 23.054a1 1 0 0 0 -.277.853l4.857 32.027a1 1 0 0 1 -.826 1.137l-31.971 5.26a1 1 0 0 0 -.727.527l-14.869 28.788a1 1 0 0 1 -1.337.434l-28.957-14.556a1 1 0 0 0 -.9 0l-28.957 14.556a1 1 0 0 1 -1.338-.434l-14.867-28.786a1 1 0 0 0 -.726-.528l-31.972-5.26a1 1 0 0 1 -.826-1.137l4.858-32.027a1 1 0 0 0 -.277-.852l-22.751-23.056a1 1 0 0 1 0-1.4l22.751-23.054a1 1 0 0 0 .277-.853l-4.857-32.027a1 1 0 0 1 .826-1.137l31.971-5.26a1 1 0 0 0 .727-.527l14.869-28.788a1 1 0 0 1 1.337-.434l28.957 14.556a1 1 0 0 0 .9 0l28.957-14.556a1 1 0 0 1 1.338.434l14.869 28.788a1 1 0 0 0 .726.528l31.972 5.26a1 1 0 0 1 .826 1.137l-4.858 32.027a1 1 0 0 0 .277.852l22.749 23.054a1 1 0 0 1 0 1.4z" fill="#ffc866"/><path d="m270.854 291.115a1 1 0 0 0 -.9 0l-28.954 14.556a1 1 0 0 1 -1.338-.434l-14.869-28.788a1 1 0 0 0 -.726-.528l-31.972-5.26a1 1 0 0 1 -.826-1.137l4.857-32.026a1 1 0 0 0 -.276-.853l-22.75-23.053a1 1 0 0 1 0-1.405l22.751-23.054a1 1 0 0 0 .276-.853l-3.711-24.475-14.724 2.422a1 1 0 0 0 -.826 1.137l4.857 32.027a1 1 0 0 1 -.277.853l-22.753 23.056a1 1 0 0 0 0 1.4l22.751 23.054a1 1 0 0 1 .276.852l-4.857 32.027a1 1 0 0 0 .826 1.137l31.972 5.26a1 1 0 0 1 .726.528l14.869 28.788a1 1 0 0 0 1.338.434l28.957-14.556a1 1 0 0 1 .9 0l28.957 14.556a1 1 0 0 0 1.337-.434l7.071-13.691z" fill="#e2a23b"/><circle cx="256" cy="224" fill="#ffedd4" r="48"/><path d="m256 176a47.969 47.969 0 0 0 -40.988 23.012 48.007 48.007 0 0 1 65.976 65.976 48 48 0 0 0 -24.988-88.988z" fill="#f9d59b"/><path d="m405.657 322.343-66.134-66.134-.808-5.33 20.285-20.556a9.032 9.032 0 0 0 0-12.644l-20.286-20.557 4.332-28.56a9.035 9.035 0 0 0 -7.438-10.227l-15.608-2.569v-99.766c0-22.43-28.112-40-64-40a8 8 0 0 0 -8 8v55.65c-23.934-2.1-40-13.4-40-23.65a8 8 0 0 0 -16 0v99.766l-15.609 2.568a9.033 9.033 0 0 0 -7.437 10.229l4.331 28.558-20.285 20.556a9.032 9.032 0 0 0 0 12.644l20.286 20.557-.808 5.331-66.134 66.134a8 8 0 0 0 5.656 13.657h32v40a8 8 0 0 0 13.657 5.657l34.343-34.343v60.686h16v-76.686l10.571-10.57a9.033 9.033 0 0 0 11.616 3.186l25.813-12.976 25.816 12.978a8.928 8.928 0 0 0 4.012.951 9.025 9.025 0 0 0 7.589-4.152l10.583 10.583v124.686c0 11.352-19.713 24-48 24s-48-12.648-48-24v-32h-16v32c0 22.43 28.112 40 64 40s64-17.57 64-40v-108.686l34.343 34.343a8 8 0 0 0 13.657-5.657v-40h32a8 8 0 0 0 5.657-13.657zm-101.657-266.343c0 10.247-16.066 21.548-40 23.65v-47.3c23.937 2.097 40 13.402 40 23.65zm-48 40c19.307 0 36.36-5.084 48-13.274v64.9l-10.149-19.649a9.03 9.03 0 0 0 -12.038-3.909l-25.813 12.978-25.816-12.978a9.027 9.027 0 0 0 -12.035 3.913l-10.149 19.649v-64.9c11.64 8.186 28.693 13.27 48 13.27zm-104 224h-20.687l37.687-37.681a9.038 9.038 0 0 0 7.4 7.346l28.5 4.69 5.939 11.5-50.839 50.832v-28.687a8 8 0 0 0 -8-8zm108.037-24.925a9.055 9.055 0 0 0 -8.079 0l-22.771 11.447-11.687-22.629a9.028 9.028 0 0 0 -6.537-4.754l-25.153-4.139 3.822-25.2a9.044 9.044 0 0 0 -2.494-7.662l-17.898-18.138 17.9-18.138a9.044 9.044 0 0 0 2.492-7.67l-3.822-25.192 25.159-4.139a9.042 9.042 0 0 0 6.526-4.75l11.693-22.634 22.775 11.449a9.045 9.045 0 0 0 8.079 0l22.771-11.447 11.69 22.632a9.028 9.028 0 0 0 6.537 4.754l25.15 4.135-3.822 25.2a9.044 9.044 0 0 0 2.494 7.662l17.898 18.138-17.9 18.138a9.044 9.044 0 0 0 -2.492 7.67l3.822 25.192-25.159 4.139a9.042 9.042 0 0 0 -6.526 4.75l-11.693 22.634zm99.963 24.925a8 8 0 0 0 -8 8v28.687l-50.833-50.834 5.939-11.5 28.5-4.689a9.038 9.038 0 0 0 7.4-7.347l37.681 37.683z"/><path d="m308.812 242.666-15.086-5.332a40.034 40.034 0 1 1 2.274-13.334h16a55.951 55.951 0 1 0 -3.188 18.666z"/></svg>
|
||||
|
After Width: | Height: | Size: 4.1 KiB |
541
system/assets/icons/techs/link.svg
Normal file
541
system/assets/icons/techs/link.svg
Normal file
@@ -0,0 +1,541 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 24.1.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{display:none;}
|
||||
.st1{display:inline;}
|
||||
.st2{fill:#FFFFFF;}
|
||||
.st3{display:inline;fill:none;}
|
||||
.st4{font-family:'L5R-Icons';}
|
||||
.st5{font-size:480px;}
|
||||
.st6{fill:#699678;}
|
||||
.st7{fill:#917896;}
|
||||
.st8{fill:#9B7350;}
|
||||
.st9{fill:#5F919B;}
|
||||
.st10{fill:#4B4641;}
|
||||
.st11{fill:#A75B58;}
|
||||
.st12{fill:#68829B;}
|
||||
.st13{fill:#009933;}
|
||||
.st14{fill:#CC3300;}
|
||||
.st15{fill:#0099FF;}
|
||||
.st16{fill:#FF6600;}
|
||||
.st17{fill:#FF0000;}
|
||||
.st18{fill:none;}
|
||||
.st19{fill:#78FFB4;}
|
||||
.st20{display:inline;fill:#785A87;}
|
||||
.st21{display:inline;fill:#9B463C;}
|
||||
.st22{display:inline;fill:#B9784B;}
|
||||
.st23{display:inline;fill:#2D551E;}
|
||||
.st24{display:inline;fill:#A08C50;}
|
||||
.st25{display:inline;fill:#55826E;}
|
||||
.st26{display:inline;fill:#82828C;}
|
||||
.st27{display:inline;fill:#789191;}
|
||||
</style>
|
||||
<g id="Fond" class="st0">
|
||||
<g transform="translate(0,0)" class="st1">
|
||||
<path class="st2" d="M249.9,18.6c-81.4,0-231.4,155.8-171.7,300.7c8,25.3,27.9,50.3,49.2,77.1c24.5,30.6,51.6,63.2,68.7,96.9h20.6
|
||||
c-18.1-39.8-48.6-75.9-74.6-108.5c-27.4-34.3-48.8-65.3-48.8-88c0-3.6,0.4-7.3,1.1-11.1l-0.1,0c0.3-1.2,0.6-2.5,0.9-3.7
|
||||
c0.9-3.8,2.1-7.6,3.7-11.4c23.1-61.4,94.2-106.3,146.6-135l3.6-2l3.9,1.3c60.9,20.9,131.3,66.8,156,135.8c1.1,3,2.1,6,2.9,9
|
||||
c0.4,1.4,0.8,2.8,1.2,4.3l-0.2,0c1.1,5.1,1.7,10.2,1.7,15.2v0c0,22.3-24.4,53.5-55,87.5c-29.1,32.3-62.3,67.6-80,106.6H300
|
||||
c16.8-32.1,46.2-64,73.3-94.1c23.1-25.7,45.3-50,54.9-74.9C481,200.2,329,18.7,249.9,18.6L249.9,18.6z M250.7,154
|
||||
c-38.7,21.5-85,52.2-113.6,88.2c9.7,83,59,146.2,118.3,146.2c59.1,0,108.2-62.7,118.2-145.3C344.7,200.9,295.6,170.1,250.7,154
|
||||
L250.7,154z M192.5,237c0.8,0,1.6,0,2.4,0c13,0.1,26,2.7,39.1,7.4c-16.8,40.6-59,42-78.1,0C168.1,239.6,180.3,237.2,192.5,237z
|
||||
M317.4,237c13-0.1,26,2.3,39.1,7.4c-19.1,42-61.3,40.6-78.1,0C291.3,239.7,304.4,237.1,317.4,237L317.4,237z M204.6,512l0.1,0.3
|
||||
h86.8l0.1-0.3L204.6,512L204.6,512z"/>
|
||||
</g>
|
||||
<rect y="18.6" class="st3" width="512" height="493.4"/>
|
||||
<text transform="matrix(1 0 0 1 16 468.6476)" class="st1 st4 st5"></text>
|
||||
</g>
|
||||
<g id="Elements" class="st0">
|
||||
<g id="Earth" class="st1">
|
||||
<g>
|
||||
<path class="st6" d="M31,258.6c0-30.9,5.9-60.2,17.8-87.7c11.6-27.2,27.6-51,48-71.5c20.5-20.5,44.3-36.5,71.5-48
|
||||
c27.5-11.9,56.7-17.8,87.7-17.8s60.2,5.9,87.7,17.8c27.2,11.6,51,27.6,71.5,48c20.5,20.5,36.5,44.3,48,71.5
|
||||
c11.9,27.5,17.8,56.7,17.8,87.7s-5.9,60.2-17.8,87.7c-11.6,27.2-27.6,51-48,71.5c-20.5,20.5-44.3,36.5-71.5,48
|
||||
c-27.5,11.9-56.7,17.8-87.7,17.8s-60.2-5.9-87.7-17.8c-27.2-11.6-51-27.6-71.5-48c-20.5-20.5-36.5-44.3-48-71.5
|
||||
C36.9,318.8,31,289.6,31,258.6z M438.3,181.8c-10.3-24.1-24.5-45.1-42.4-63c-18-18-39-32.1-63-42.4C308.8,66,283.2,60.8,256,60.8
|
||||
s-52.8,5.2-76.9,15.5c-24.1,10.3-45.1,24.5-63,42.4c-18,18-32.1,39-42.4,63c-10.3,24.1-15.5,49.7-15.5,76.9
|
||||
c0,5.3,0.2,10.6,0.7,15.9c0.5,5.3,1,10.6,1.6,15.9l4.2-0.5c5.9-4.4,11.4-9.3,16.4-14.8c5-5.5,9.7-11.3,14.1-17.6
|
||||
c5.3,0.9,10.8,0.8,16.4-0.5c5.6-1.2,10.6-4.8,15-10.8l55.8-75.9l16.4,22l75-83.9l35.2,36.6c4.1,4.4,7.4,9.4,10.1,15
|
||||
c2.7,5.6,6,10.8,10.1,15.5c5.3,6.3,10.9,12.4,16.6,18.5c5.8,6.1,12.1,11.6,19,16.6l8.4,6.6l21.1-12.2
|
||||
c7.2,17.5,15.2,34.7,24.1,51.6s18.7,33.6,29.3,50.2c2.2-7.8,3.8-15.7,4.7-23.7s1.4-16.2,1.4-24.6
|
||||
C453.8,231.5,448.7,205.8,438.3,181.8z M162.3,231.9l37-19.2l-15.9-19.2L162.3,231.9z M313.7,234.3l28.6,47.3
|
||||
c5-4.7,9.6-10.5,13.8-17.3c4.2-6.9,8.2-14.5,12-23L288.3,156l-34.7,227.3L313.7,234.3z M405.1,277.4c0.9-2.8,2.3-5.6,4.2-8.4
|
||||
l-20.6-37h-1.9l6.1,75c3.1-2.2,5.6-5.2,7.5-9.1c1.9-3.9,3-7.9,3.3-12C403.7,283,404.1,280.2,405.1,277.4z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Air">
|
||||
<g class="st1">
|
||||
<path class="st7" d="M31,258.6c0-30.9,5.9-60.2,17.8-87.7c11.6-27.2,27.6-50.9,48-71.3c20.5-20.3,44.3-36.4,71.5-48.3
|
||||
c27.5-11.9,56.7-17.8,87.7-17.8s60.2,5.9,87.7,17.8c27.2,11.9,51,28,71.5,48.3c20.5,20.3,36.5,44.1,48,71.3
|
||||
c11.9,27.5,17.8,56.7,17.8,87.7s-5.9,60.2-17.8,87.7c-11.6,27.2-27.6,51-48,71.5c-20.5,20.5-44.3,36.5-71.5,48
|
||||
c-27.5,11.9-56.7,17.8-87.7,17.8s-60.2-5.9-87.7-17.8c-27.2-11.6-51-27.6-71.5-48c-20.5-20.5-36.5-44.3-48-71.5
|
||||
C36.9,318.8,31,289.6,31,258.6z M138.8,314c-11.9-5.6-22.6-13.2-32.1-22.7c-9.5-9.5-17.7-21.2-24.6-34.9
|
||||
c-7.2-13.7-13-29.8-17.3-48.3c-2.2,8.1-3.8,16.4-4.9,24.8c-1.1,8.4-1.6,17-1.6,25.8c0,3.1,0.1,6.2,0.2,9.1c0.2,3,0.4,5.9,0.7,8.7
|
||||
C77.9,293,97,306,116.5,315.4c19.5,9.4,39.6,12.8,60.2,10.3C163,323.2,150.4,319.3,138.8,314z M443.3,194.7
|
||||
c-7-20.2-16.8-38.5-29.3-55.1c-20.9-14.1-43.3-21.9-67-23.4c-23.8-1.6-46,1.4-66.8,8.9c-20.8,7.5-38.5,18.6-53.2,33.3
|
||||
c-14.7,14.7-23.4,31.3-26.3,49.7c-1.6,10.9,3,21.6,13.6,31.9c10.6,10.3,21.4,15.6,32.3,15.9c8.4,0.3,16.5-3,24.1-9.8
|
||||
c7.7-6.9,12-14.4,12.9-22.5c0.6-5.9-0.8-11.7-4.2-17.3c-3.4-5.6-8.9-9.4-16.4-11.3c-4.1-0.9-8.5-0.2-13.4,2.1
|
||||
c-4.8,2.3-7.7,5.7-8.7,10.1c-1.3,4.7-1.1,8.4,0.5,11.3c1.6,2.8,4.2,4.2,8,4.2c3.4,0.3,6.3-0.8,8.7-3.3c2.3-2.5,0.5-5.9-5.4-10.3
|
||||
c5.9-0.3,10.3,1.3,13.1,4.9c2.8,3.6,3.6,9.1,2.3,16.6c-0.6,4.1-3.4,7.2-8.4,9.4c-5,2.2-9.5,3-13.6,2.3
|
||||
c-7.2-1.2-13.8-5.2-19.7-11.7c-5.9-6.6-8.9-13.4-8.9-20.6c0-9.4,3.8-18.8,11.3-28.1s15.9-14.4,25.3-15
|
||||
c12.8-0.9,24.8,1.1,35.9,6.1c11.1,5,18.5,19.8,22.3,44.5c5.9-11.3,14.5-19.2,25.8-23.9s22.7-5.7,34.2-3
|
||||
c11.6,2.7,22,9.3,31.4,19.9c9.1,10.3,14.2,25,15.5,44.1c0.9,12.2-1.7,23.9-8,35.2c-5.9,11.3-13.8,20.7-23.7,28.4
|
||||
c-9.8,7.7-20.7,12.6-32.6,14.8c-11.9,2.5-23.1,0.9-33.8-4.7c2.5,20-0.9,35.9-10.3,47.8c-9.4,11.6-21.6,18.8-36.6,21.8
|
||||
c-15,3-31.3,1.3-48.8-4.9c-17.2-6.2-32.3-17.3-45.5-33.3c-1.3-1.2-3.2-1.8-5.9-1.6c-2.7,0.2-4.6,1-5.9,2.6l-5.6,8.4
|
||||
c-17.8-6.2-35.2-16.4-52.3-30.5c-17-14.1-33.8-30.9-50.4-50.6c3.8,23.8,11.3,45.9,22.5,66.6c11.6,20.6,26.1,38.5,43.6,53.7
|
||||
c17.5,15.2,37.2,27,59.1,35.4c22.2,8.8,45.8,13.1,70.8,13.1c27.2,0,52.8-5.2,76.9-15.5c24.1-10.3,45.1-24.4,63-42.4
|
||||
c18-18,32.1-39,42.4-63c10.3-24.1,15.5-49.7,15.5-76.9C453.8,236.1,450.3,214.8,443.3,194.7z M147.7,93.2
|
||||
c-7.2,4.7-14.1,9.8-20.6,15.5s-12.8,11.7-18.8,18.3c-4.4,35.6-3.6,64.1,2.3,85.3c5.6,21.3,14.9,37.6,27.9,49
|
||||
c13,11.4,28.8,18.8,47.6,22.3c18.4,3.4,38.1,5,59.1,4.7c-26.6-4.1-48.1-11.6-64.7-22.5c-16.3-10.9-28.1-24.8-35.4-41.5
|
||||
c-7.3-16.7-10.5-36.2-9.6-58.4C136.2,143.7,140.2,119.4,147.7,93.2z M309.4,68.1c-10.9-3-22.2-5.1-33.8-6.3
|
||||
C256,69,239.1,77.1,225.1,86.1c-13.8,9.4-24.8,19.8-33,31.4c-8.3,11.6-13.5,24.1-15.7,37.5c-2.5,13.8-2.2,28.4,0.9,44.1
|
||||
c1.6-16.9,5.8-32.2,12.7-45.9c7.2-14.1,17.4-26.1,30.7-36.1c13.3-10,29.9-18.1,49.9-24.4c20-6.6,43.4-10.8,70.3-12.7
|
||||
C330.8,75.1,320.4,71.1,309.4,68.1z M264,317.2c-3.1,2.8-5.2,6.1-6.1,9.8c-0.3,1.9,0.2,3.9,1.6,6.1c1.4,2.2,3,3.6,4.9,4.2
|
||||
c1.2,0.3,2.6,0.2,4-0.5c1.4-0.6,2.4-1.4,3-2.3c0.6-0.9,1-1.9,1.2-2.8c0.2-0.9,0.1-1.7-0.2-2.3c-0.3-0.6-0.7-1.2-1.2-1.6
|
||||
s-1-0.9-1.6-1.2c8.1-1.2,11.6,2.4,10.5,11c-1.1,8.6-6.5,14-16.2,16.2c-8.4,1.6-15-0.5-19.7-6.1s-7.2-12.2-7.5-19.7
|
||||
c0-13.1,5.1-22,15.2-26.5c10.2-4.5,22.7-5.7,37.7-3.5c-13.1-10.9-26.3-14.2-39.4-9.8c-13.4,4.1-23.4,11.4-30,22
|
||||
c-6.6,10.6-8,22-4.2,34.2s15.9,20.9,36.6,26.3c22.8,3.4,36.7-3.8,41.7-21.6c5-17.8-1.3-29.4-18.8-34.7
|
||||
C271,313.5,267.1,314.4,264,317.2z M379,259.4c2-5.5,2.9-10.9,2.6-16.2c-0.3-4.4-1.7-8.6-4.2-12.7c-2.5-4.1-5.6-7.3-9.4-9.8
|
||||
c-2.8-2.2-6.1-3.5-9.8-4s-7.3-0.2-10.8,0.7c-3.1,0.6-6,2-8.7,4c-2.7,2-4.5,4.6-5.4,7.7c-0.6,1.9-0.6,3.9,0,6.1
|
||||
c0.6,2.2,1.6,4.1,2.8,5.6c1.6,1.3,3.5,2.1,5.9,2.6s4.5,0.4,6.3-0.2c1.2-0.3,2.4-1.1,3.5-2.3c1.1-1.2,1.6-2.5,1.6-3.8
|
||||
c0.3-0.9,0.2-1.8-0.5-2.6c-0.6-0.8-1.4-1.5-2.3-2.1c-0.9-0.6-1.8-1.2-2.6-1.6c-0.8-0.5-1.6-0.9-2.6-1.2c0.3-1.2,1.7-2.1,4.2-2.6
|
||||
c2.5-0.5,4.5-0.2,6.1,0.7c3.4,1.6,6.3,4.4,8.7,8.4c2.3,4.1,3,8,2.1,11.7c-1.6,5.3-5.2,9.7-10.8,13.1c-5.6,3.4-11.1,5.2-16.4,5.2
|
||||
c-5.9,0-11.6-1.9-16.9-5.6c-5.3-3.8-9.2-8.9-11.7-15.5c-1.6,5.9-3.3,11.1-5.2,15.5c-1.9,4.4-4.1,7.7-6.6,9.8
|
||||
c9.4,12.2,20.7,18.4,34,18.5c13.3,0.2,25.7-5.2,37.3-16.2C374.1,269.3,377,264.8,379,259.4z M389.1,227.7
|
||||
c4.4,20.3,2.8,37.3-4.7,51.1c-7.5,13.8-22.8,23.4-45.9,29.1c11.9,3.1,23,2.2,33.3-2.8c10.3-5.3,18.4-12.3,24.4-21.1
|
||||
c5.9-8.7,8.7-18.4,8.4-29.1C404,244.6,398.8,235.5,389.1,227.7z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Fire">
|
||||
<g class="st1">
|
||||
<path class="st8" d="M31,258.6c0-30.9,5.9-60.2,17.8-87.7c11.6-27.2,27.6-51,48-71.5c20.5-20.5,44.3-36.5,71.5-48
|
||||
c27.5-11.9,56.7-17.8,87.7-17.8s60.2,5.9,87.7,17.8c27.2,11.6,51,27.6,71.5,48c20.5,20.5,36.5,44.3,48,71.5
|
||||
c11.9,27.5,17.8,56.7,17.8,87.7s-5.9,60.2-17.8,87.7c-11.6,27.2-27.6,51-48,71.5c-20.5,20.5-44.3,36.5-71.5,48
|
||||
c-27.5,11.9-56.7,17.8-87.7,17.8s-60.2-5.9-87.7-17.8c-27.2-11.6-51-27.6-71.5-48c-20.5-20.5-36.5-44.3-48-71.5
|
||||
C36.9,318.8,31,289.6,31,258.6z M370.4,384.7c0.3-3.1,1.4-5.3,3.3-6.6c2.8-2.5,4.7-5.4,5.6-8.7s1.4-7.4,1.4-12.4
|
||||
c2.2,3.1,3.8,6.8,4.9,11c1.1,4.2,0.9,9.5-0.7,15.7c-0.9,2.2-0.6,3.8,0.9,4.7c1.6,0.9,3.3,0,5.2-2.8c6.6-10.3,9.7-20.7,9.4-31.2
|
||||
c-0.3-10.5-3.3-20.9-8.9-31.2c-8.1-16.9-10.2-30.1-6.1-39.6c4.1-9.5,12.8-15.1,26.3-16.6c-13.1,9.1-18.2,18.2-15.2,27.4
|
||||
c3,9.2,12,18.5,27,27.9c4.1-5.9,8.3-11.5,12.7-16.6c4.4-5.2,8.9-9.8,13.6-13.8l1.9-0.9c0.6-5.3,1.2-10.6,1.6-15.9
|
||||
c0.5-5.3,0.7-10.8,0.7-16.4c0-27.2-5.2-52.8-15.5-76.9c-10.3-24.1-24.5-45.1-42.4-63c-18-18-39-32.1-63-42.4
|
||||
C308.8,66,283.2,60.8,256,60.8s-52.8,5.2-76.9,15.5c-24.1,10.3-45.1,24.5-63,42.4c-18,18-32.1,39-42.4,63
|
||||
c-10.3,24.1-15.5,49.7-15.5,76.9c0,21.9,3.4,42.7,10.1,62.6c6.7,19.8,16.2,38,28.4,54.6c1.6-0.3,3.4-0.5,5.4-0.5
|
||||
c2,0,3.4-0.5,4-1.4c0.6-0.9,0.7-1.9,0.2-2.8s-0.5-1.7-0.2-2.3c2.5-4.4,6.3-8,11.5-10.8s10.1-4.4,14.8-4.7
|
||||
c-5.6,5.9-9.4,11.6-11.3,17.1c-1.9,5.5-0.9,10.1,2.8,13.8l10.3,10.8c0.9-6.9,2.3-13.4,4.2-19.7c1.9-6.2,4.1-12.3,6.6-18.3
|
||||
c0.9,5.9,2.4,11.8,4.5,17.6c2,5.8,3.4,11.6,4,17.6c10-1.2,14.9-6.6,14.8-16.2c-0.2-9.5-2.1-17.1-5.9-22.7l-6.6-10.3
|
||||
c-10.3-16.6-19.1-36.4-26.3-59.5c-7.2-23.1,3.9-42,33.3-56.7c-9.7,9.4-14.6,18.7-14.8,27.9c-0.2,9.2,4.5,17.9,13.8,26
|
||||
c2.2-12.8,6.2-20.3,12-22.5c5.8-2.2,8.2-15.3,7.3-39.4c6.2,5.3,9.8,13.7,10.8,25.1c0.9,11.4,4.4,18.4,10.3,20.9
|
||||
c7.2-4.1,8.6-12.9,4.2-26.5c-4.4-13.6-9.8-26.6-16.4-39.1c-15-26.9-17.3-49.7-7-68.4c10.3-19.1,24.4-32.3,42.2-39.6
|
||||
c17.8-7.3,35-7.7,51.6-1.2c16.6,6.3,23.4,21.3,20.6,45c-1.9-19.1-7.7-30-17.3-32.8c-9.7-2.5-18.1,0-25.3,7.5
|
||||
c-7.2,7.5-10.8,18.8-10.8,33.8c0,14.7,8.9,30,26.7,45.9c10.6-2.8,16-8.4,16.2-16.9c0.2-8.4-0.4-15.9-1.6-22.5
|
||||
c2.8,6.6,5.6,12.7,8.4,18.5c2.8,5.8,6.4,10.4,10.8,13.8c3.1,3.1,5.4,7.3,6.8,12.7c1.4,5.3,1.6,12,0.7,20.2l20.2,19.2
|
||||
c4.1-2.8,6.7-6.2,8-10.1c1.2-3.9,0.6-8.4-1.9-13.4l-5.2-10.3c-5.9-11.9-8.1-23-6.6-33.5c1.6-10.5,10.2-15.7,25.8-15.7
|
||||
c-10.9,8.1-16.1,15.6-15.5,22.5c0.6,6.9,3.1,13,7.5,18.3l13.1,15.9c9.1,10.6,15.3,22.7,18.8,36.1c3.4,13.4,0.2,29.1-9.8,46.9
|
||||
c9.1,15.6,13,30.2,11.7,43.8c-1.3,13.6-6.6,26.3-15.9,38.2c-0.6,1.9-1.6,3.5-3,4.9s-2.3,3-2.6,4.9c-0.3,2.2-0.2,4.3,0.2,6.3
|
||||
c0.5,2,1.2,4.1,2.1,6.3c0.3,0.6,0.7,1.4,1.2,2.3s1.2,1.4,2.1,1.4c1.2,0,2.3-0.8,3.3-2.3c0.9-1.6,1.7-3,2.3-4.2
|
||||
C369.1,390.5,370.1,387.9,370.4,384.7z M301,408.6c0.3-7.5,3.8-13.7,10.3-18.8c8.4-6.6,15.7-14.3,21.8-23.2s8.2-17.1,6.3-24.6
|
||||
c-1.3,3.4-3.2,5.6-5.9,6.6c-2.7,0.9-5.6,1.3-8.7,0.9l-10.8-0.9c-1.3,0-2-1.1-2.3-3.3c-0.3-2.2-0.2-3.9,0.5-5.2
|
||||
c10.3-16.9,16.6-31.2,19-42.9s1-20.2-4-25.5c-1.3,5.3-4.1,11.1-8.7,17.3c-4.5,6.3-8.7,9.5-12.4,9.8h-7c-1.9,0-3.7-0.5-5.4-1.6
|
||||
c-1.7-1.1-2.9-2.6-3.5-4.5c-4.4-15.3-10.9-28.5-19.7-39.6c-8.8-11.1-18-21.6-27.7-31.6c10,35.9,9.4,63.8-1.9,83.7
|
||||
c-11.3,19.8-30,24.6-56.3,14.3c10,18.1,16.9,35.6,20.6,52.3c3.8,16.7-0.9,31.6-14.1,44.8c-0.3,0.3-0.6,0.5-0.9,0.7
|
||||
c-0.3,0.2-0.8,0.2-1.4,0.2h-5.2c-0.9,0-1.9,0.2-2.8,0.7s-1.9,1-2.8,1.6c-0.6,0.6-1.2,1.3-1.6,2.1c-0.5,0.8-0.7,1.6-0.7,2.6
|
||||
c-0.3,0.9-0.4,1.9-0.2,2.8c0.2,0.9,0.4,1.7,0.7,2.3c0.6,0.9,1.2,1.7,1.6,2.3c0.5,0.6,1,1.3,1.6,1.9c2.8,2.2,5.9,4.2,9.1,6.1
|
||||
s6.6,3.1,10.1,3.8l8.9-2.3c-2.8-3.8-5.1-7.1-6.8-10.1c-1.7-3-2.6-5.1-2.6-6.3c1.9,0.6,3.9,1.9,6.1,3.8c2.2,1.9,4.5,4.1,7,6.6
|
||||
l7.5-5.2c1.9-4.7,3.1-9.5,3.8-14.5c0.6-5,0-9.7-1.9-14.1l-7.5-17.8c-0.3-1.2-0.5-2.4-0.7-3.5c-0.2-1.1-0.1-2.3,0.2-3.5l13.1,17.8
|
||||
c2.2,3.1,4.4,3.3,6.6,0.5c2.2-2.8,3.9-5.2,5.2-7c1.2-2.5,1.6-5.4,0.9-8.7c-0.6-3.3-1.4-6.3-2.3-9.1c-2.2-5.9-5.2-11.6-8.9-16.9
|
||||
c-3.8-5.3-7.8-10.3-12.2-15c6.2,1.9,11.8,5.3,16.6,10.3c4.8,5,9.8,9.8,14.8,14.5c2.5,2.5,4.9,3.4,7.3,2.6
|
||||
c2.3-0.8,2.7-2.9,1.2-6.3c-4.1-10.6-5.7-22.7-4.9-36.1c0.8-13.4,6-26.3,15.7-38.4c-0.3,7.2,0,16.5,0.9,27.9
|
||||
c0.9,11.4,4.4,19.8,10.3,25.1c4.4,2.2,9.1,1.5,14.1-2.1c5-3.6,8.7-7.7,11.3-12.4c-5.9,17.2-8.2,33.9-6.8,50.2
|
||||
c1.4,16.3-3.5,31.1-14.8,44.5c-5,5.6-4.8,10.7,0.5,15.2c5.3,4.5,10.6,4.1,15.9-1.2c-3.4,5.3-5.2,9.4-5.2,12.2s2.5,4.1,7.5,3.8
|
||||
c2.8-0.9,5.5-2,8.2-3.3c2.7-1.2,5.2-2.7,7.7-4.2C305.5,426.8,300.7,416.1,301,408.6z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Water">
|
||||
<g class="st1">
|
||||
<path class="st9" d="M31,258.6c0-30.9,5.9-60.2,17.8-87.7c11.6-27.2,27.6-51,48-71.5c20.5-20.5,44.3-36.5,71.5-48
|
||||
c27.5-11.9,56.7-17.8,87.7-17.8s60.2,5.9,87.7,17.8c27.2,11.6,51,27.6,71.5,48c20.5,20.5,36.5,44.3,48,71.5
|
||||
c11.9,27.5,17.8,56.7,17.8,87.7s-5.9,60.2-17.8,87.7c-11.6,27.2-27.6,51-48,71.5c-20.5,20.5-44.3,36.5-71.5,48
|
||||
c-27.5,11.9-56.7,17.8-87.7,17.8s-60.2-5.9-87.7-17.8c-27.2-11.6-51-27.6-71.5-48c-20.5-20.5-36.5-44.3-48-71.5
|
||||
C36.9,318.8,31,289.6,31,258.6z M376,327.8c11.9-8,22-17.1,30.5-27.4c8.4-10,14.8-21.2,19.2-33.5c4.4-12.3,8.1-24.8,11.3-37.3
|
||||
c1.6-6.6,2.7-13.1,3.5-19.7c0.8-6.6,1.2-13.1,1.2-19.7c-6.9-19.1-16.4-36.4-28.6-52c-12.5-15.9-26.8-29.6-42.9-41
|
||||
c-16.1-11.4-33.8-20.4-53.2-27c-19.4-6.2-39.7-9.4-60.9-9.4c-27.2,0-52.8,5.2-76.9,15.5c-24.1,10.3-45.1,24.5-63,42.4
|
||||
c-18,18-32.1,39-42.4,63c-10.3,24.1-15.5,49.7-15.5,76.9c0,10,0.7,19.8,2.1,29.3c1.4,9.5,3.5,18.8,6.3,27.9
|
||||
c9.7-44.4,22.7-81.4,38.9-111.1c16.6-29.7,35.9-52.9,58.1-69.6c22.2-16.7,47.2-27.4,75-32.1c27.8-4.4,58-3.8,90.5,1.9l13.1,11.7
|
||||
l-17.8,3.3c-3.1,0.6-6.4,1.3-9.8,1.9c-3.4,0.6-6.4,1.9-8.9,3.8c-1.6,0.9-3,2.2-4.5,3.8c-1.4,1.6-1.8,3.1-1.2,4.7
|
||||
c0.3,0.9,1,1.5,2.1,1.6c1.1,0.2,2.1,0.4,3,0.7c3.1,0.6,6.2,0.5,9.4-0.2c3.1-0.8,6.2-1,9.4-0.7c3.8,0.3,7.7,0.7,11.7,1.2
|
||||
c4.1,0.5,7.8,1.6,11.3,3.5c5.3,2.5,10.6,5.6,15.9,9.4c5.3,3.8,9.2,8.4,11.7,14.1c1.2,3.1,1.5,6.6,0.7,10.3
|
||||
c-0.8,3.8-1.5,7.3-2.1,10.8c-3.8-10.3-8.3-16.6-13.6-19c-5.3-2.3-11.6-4-18.8-4.9c-6.9-0.9-12.4,0.5-16.6,4.5
|
||||
c-4.2,3.9-4.6,9.3-1.2,16.2c0.6,1.6,1.6,3,3,4.5s2.7,2.7,4,4l12.2,10.3c6.9,5.9,11.6,13.7,14.1,23.2c2.5,9.5,0.2,19.9-7,31.2
|
||||
c0-9.1-1.1-16.2-3.3-21.6c-2.2-5.3-5.8-8.3-10.8-8.9l-14.1-3.8c-5.9-1.6-10.2-0.9-12.9,1.9c-2.7,2.8-2.1,7.8,1.6,15l3.8,6.1
|
||||
c3.8,6.3,4.8,14.1,3,23.7c-1.7,9.5-5.9,16.2-12.4,19.9c2.2-14.7,0.9-25-3.8-30.9c-4.7-5.9-11.6-9.2-20.6-9.8
|
||||
c-6.6-2.5-13.8-2.2-21.6,0.9c-7.8,3.1-14.1,7.3-18.8,12.7c-5,5.6-8.6,12.7-10.8,21.1c-2.2,8.4-2,16.3,0.5,23.4
|
||||
c3.1,9.4,9.3,17.2,18.5,23.4c9.2,6.3,18.5,11.1,27.9,14.5c9.7,3.8,20.1,5.9,31.2,6.3c11.1,0.5,21.8-0.5,32.1-3
|
||||
C351.8,341.6,364.1,335.8,376,327.8z M189,408.2l-2.8-2.8c-1.9-1.9-1.5-4.8,1.2-8.7c2.7-3.9,5.4-5.7,8.2-5.4l115.8,8.9
|
||||
c17.8,1.3,34.6-3.9,50.4-15.5c15.8-11.6,29-26.4,39.6-44.5c-11.9,10.6-26.6,19.3-44.1,26c-17.5,6.7-34.8,9.3-52,7.7l-119.5-9.4
|
||||
c-3.8,0.3-6.8,1.6-9.1,3.8c-2.3,2.2-3.7,5.3-4,9.4L157.1,366c-5.9-4.7-10.8-10.5-14.5-17.6s-7.3-14-10.8-20.9
|
||||
c-2.5-5.3-2.1-9.5,1.2-12.7c3.3-3.1,7.4-2.8,12.4,0.9l15,9.4l6.1-7l-27.2-23c-4.7-2.8-9.7-2.4-15,1.2c-5.3,3.6-8.3,7.6-8.9,12
|
||||
c-1.9,10.9-1,22.3,2.6,34c3.6,11.7,9.4,21.3,17.6,28.8l46.9,46.4L189,408.2z M293,177.6c-0.6-6.6,2.2-12.7,8.4-18.3
|
||||
c-19.1-0.6-29.1-4.5-30-11.5s4.7-16.2,16.9-27.4c-17.8-1.2-34.4-0.2-49.7,3.3c-15.3,3.4-29.5,9.1-42.7,17.1s-25.3,18-36.6,30.2
|
||||
c-10.9,11.9-21.1,25.6-30.5,41.3c15.6-6.9,30.6-11.9,45-15c14.7-3.1,28.8-4.1,42.4-3c13.6,1.1,26.5,4.6,38.7,10.5
|
||||
c12.2,5.9,23.7,14.8,34.7,26.7c-3.4-9.7-3.1-17.2,0.9-22.5c4.1-5.3,11.7-8.4,23-9.4C300.5,191.5,293.7,184.1,293,177.6z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Void">
|
||||
<g class="st1">
|
||||
<path class="st10" d="M31,258.6c0-30.9,5.9-60.2,17.8-87.7c11.6-27.2,27.6-51,48-71.5c20.5-20.5,44.3-36.5,71.5-48
|
||||
c27.5-11.9,56.7-17.8,87.7-17.8s60.2,5.9,87.7,17.8c27.2,11.6,51,27.6,71.5,48c20.5,20.5,36.5,44.3,48,71.5
|
||||
c11.9,27.5,17.8,56.7,17.8,87.7s-5.9,60.2-17.8,87.7c-11.6,27.2-27.6,51-48,71.5c-20.5,20.5-44.3,36.5-71.5,48
|
||||
c-27.5,11.9-56.7,17.8-87.7,17.8s-60.2-5.9-87.7-17.8c-27.2-11.6-51-27.6-71.5-48c-20.5-20.5-36.5-44.3-48-71.5
|
||||
C36.9,318.8,31,289.6,31,258.6z M438.3,181.8c-10.3-24.1-24.5-45.1-42.4-63c-18-18-39-32.1-63-42.4C308.8,66,283.2,60.8,256,60.8
|
||||
s-52.8,5.2-76.9,15.5c-24.1,10.3-45.1,24.5-63,42.4c-18,18-32.1,39-42.4,63c-10.3,24.1-15.5,49.7-15.5,76.9
|
||||
c0,21.6,3.3,42.2,9.8,61.9c6.6,19.4,15.7,37.2,27.4,53.4c11.7,16.3,25.5,30.5,41.5,42.7c16.2,12.2,33.9,21.7,53,28.6
|
||||
c-15-6.2-28.8-14.7-41.3-25.3c-12.5-10.3-23.2-22.2-32.1-35.6c-8.9-13.4-15.9-28-20.9-43.6c-5-15.9-7.5-32.7-7.5-50.2
|
||||
c0-23.1,4.4-44.8,13.1-65.2c8.7-20.3,20.7-38,35.9-53.2c15.2-15.2,32.9-27.3,53.2-36.3c20.6-8.7,42.5-13.1,65.6-13.1
|
||||
c23.1,0,44.8,4.4,65.2,13.1c20.3,9.1,38.1,21.2,53.4,36.3c15.3,15.2,27.3,32.9,36.1,53.2c8.7,20.3,13.1,42,13.1,65.2
|
||||
c0,17.5-2.5,34.2-7.5,50.2c-5,15.9-12,30.6-21.1,44.1c-9.1,13.4-20,25.3-32.8,35.6c-12.5,10.6-26.4,19.1-41.7,25.3
|
||||
c19.4-6.9,37.2-16.4,53.4-28.6c16.2-12.2,30.3-26.4,42.2-42.7c11.9-16.2,21.1-34.2,27.7-53.9s9.8-40.3,9.8-61.9
|
||||
C453.8,231.5,448.7,205.8,438.3,181.8z M211.9,344.4c12.2-12.2,26.9-18.3,44.1-18.3c17.2,0,31.9,6.1,44.1,18.3
|
||||
s18.3,26.9,18.3,44.1c0,12.5-3.4,23.8-10.3,34c-6.9,10.2-15.6,17.7-26.3,22.7c22.8-5.9,41.7-18.3,56.7-37S361,367.7,361,343
|
||||
c0-12.8-2.2-25-6.6-36.6c-4.4-11.6-10.5-22-18.3-31.2c-7.8-9.2-17-16.9-27.7-23.2c-10.6-6.2-22-10.5-34.2-12.7
|
||||
c7.2,3.4,13.1,8.7,17.8,15.7s7,14.8,7,23.2c0,12.2-4.2,22.4-12.7,30.7c-8.4,8.3-18.6,12.4-30.5,12.4c-11.9,0-22-4.1-30.5-12.4
|
||||
c-8.4-8.3-12.7-18.5-12.7-30.7c0-8.4,2.3-16.2,6.8-23.2c4.5-7,10.5-12.3,18-15.7c-12.5,2.2-24.1,6.4-34.7,12.7
|
||||
c-10.6,6.3-19.8,14-27.4,23.2c-7.7,9.2-13.8,19.6-18.5,31.2c-4.4,11.6-6.6,23.8-6.6,36.6c0,24.7,7.6,46.4,22.7,65.2
|
||||
c15.2,18.8,34.1,31.1,57,37c-10.9-5-19.8-12.6-26.5-22.7c-6.7-10.2-10.1-21.5-10.1-34C193.7,371.3,199.8,356.6,211.9,344.4z
|
||||
M304.3,382.4c0-13.4-4.7-24.8-14.1-34.2s-20.8-14.1-34.2-14.1c-13.4,0-24.8,4.7-34.2,14.1s-14.1,20.8-14.1,34.2
|
||||
c0,13.4,4.7,24.8,14.1,34.2s20.8,14.1,34.2,14.1c13.4,0,24.8-4.7,34.2-14.1S304.3,395.8,304.3,382.4z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Npcs" class="st0">
|
||||
<g id="Martial" class="st1">
|
||||
<g>
|
||||
<path class="st11" d="M57.3,388.5L31,315.4c8.7-1.9,18-3.4,27.7-4.7c9.7-1.2,20-1.9,30.9-1.9c5.9,10.6,13.3,20.5,22,29.5
|
||||
c8.7,9.1,19.1,17.2,30.9,24.4c-14.7,1.9-29.2,5-43.6,9.4C84.6,376.5,70.7,381.9,57.3,388.5z M50.7,100.7
|
||||
c12.2,9.1,22.7,19.1,31.6,30.2c8.9,11.1,10.5,22.9,4.9,35.4c-8.1,17.5-12.5,35.9-13.1,55.3c-0.6,19.4,3.6,38,12.7,56
|
||||
c9.1,18,23.4,34.6,43.1,49.9c19.7,15.3,45.8,27.7,78.3,37c2.8-6.2,6.1-11.3,9.8-15s7.7-7,11.7-9.8c-28.1-9.7-48.3-23-60.5-39.8
|
||||
s-18.8-33-19.7-48.3c-0.9-15.3,2.7-27.8,10.8-37.5c8.1-9.4,18.3-11.6,30.5-6.6c-2.5-17.5,1.2-28.4,11.3-32.8
|
||||
c10-4.4,19.7-1.4,29.1,8.9c7.8-21.2,5.9-39.9-5.6-56c-11.6-16.1-29.5-20.7-53.9-13.8c-5.9-7.8-13.8-13.9-23.7-18.3
|
||||
c-9.8-4.4-19.9-5-30.2-1.9c-10.3,3.1-20.7,3.7-31.2,1.6c-10.5-2-21.2-6-32.1-12L50.7,100.7z M83,393.6
|
||||
c17.2-6.2,34.5-12.7,51.8-19.5c17.3-6.7,30.1-4,38.2,8.2c5.3,0,10.6,0.4,15.9,1.2c5.3,0.8,10.5,2.7,15.5,5.9
|
||||
c0,5.3,0.7,10.4,2.1,15.2c1.4,4.8,3.5,9.3,6.3,13.4h-74.5v-13.6c-5.9,2.8-11.4,6.7-16.4,11.7c-5,5-9.7,10.9-14.1,17.8L83,393.6z
|
||||
M256,354.7c-9.1,0-16.8,3.1-23.2,9.4c-6.4,6.3-9.6,13.9-9.6,23c0,9.1,3.2,16.8,9.6,23.2c6.4,6.4,14.1,9.6,23.2,9.6
|
||||
c9.1,0,16.7-3.2,23-9.6c6.2-6.4,9.4-14.1,9.4-23.2c0-9.1-3.1-16.7-9.4-23C272.7,357.9,265.1,354.7,256,354.7z M461.3,100.7
|
||||
c-12.2,9.1-22.7,19.1-31.6,30.2c-8.9,11.1-10.5,22.9-4.9,35.4c8.1,17.5,12.5,35.9,13.1,55.3c0.6,19.4-3.6,38-12.7,56
|
||||
c-9.1,18-23.4,34.6-43.1,49.9c-19.7,15.3-45.8,27.7-78.3,37c-2.8-6.2-6.1-11.3-9.8-15s-7.7-7-11.7-9.8
|
||||
c28.1-9.7,48.3-23,60.5-39.8s18.8-33,19.7-48.3c0.9-15.3-2.7-27.8-10.8-37.5c-8.1-9.4-18.3-11.6-30.5-6.6
|
||||
c2.5-17.5-1.3-28.4-11.3-32.8c-10-4.4-19.7-1.4-29.1,8.9c-7.8-21.2-5.9-39.9,5.6-56c11.6-16.1,29.5-20.7,53.9-13.8
|
||||
c5.9-7.8,13.8-13.9,23.7-18.3c9.8-4.4,19.9-5,30.2-1.9c10.3,3.1,20.7,3.7,31.2,1.6c10.5-2,21.2-6,32.1-12L461.3,100.7z
|
||||
M429,393.6c-17.2-6.2-34.5-12.7-51.8-19.5c-17.3-6.7-30.1-4-38.2,8.2c-5.3,0-10.6,0.4-15.9,1.2c-5.3,0.8-10.5,2.7-15.5,5.9
|
||||
c0,5.3-0.7,10.4-2.1,15.2c-1.4,4.8-3.5,9.3-6.3,13.4h74.5v-13.6c5.9,2.8,11.4,6.7,16.4,11.7c5,5,9.7,10.9,14.1,17.8L429,393.6z
|
||||
M454.8,388.5l26.3-73.1c-8.8-1.9-18-3.4-27.7-4.7c-9.7-1.2-20-1.9-30.9-1.9c-5.9,10.6-13.3,20.5-22,29.5
|
||||
c-8.8,9.1-19.1,17.2-30.9,24.4c14.7,1.9,29.2,5,43.6,9.4C427.4,376.5,441.3,381.9,454.8,388.5z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Social">
|
||||
<g class="st1">
|
||||
<path class="st12" d="M249.4,382.4L31,265.2c7.8-6.9,15.9-13.3,24.1-19.2c8.3-5.9,17.1-11.3,26.5-15.9c2.8-6.6,5.4-13.2,7.7-19.9
|
||||
c2.3-6.7,4.1-13.5,5.4-20.4l-8.4-8.4c9.4-4.1,18.9-7.1,28.6-9.1c9.7-2,19.5-3.2,29.5-3.5c5.3-4.1,10.4-8.8,15.2-14.3
|
||||
c4.8-5.5,9.4-11.5,13.8-18l-6.6-11.3c9.1-0.3,18.3,0.5,27.7,2.6c9.4,2,19.2,5.2,29.5,9.6c6.9-1.9,13.4-4.2,19.7-7
|
||||
c6.2-2.8,12.2-6.6,17.8-11.3v-12.7c7.8,3.4,15.6,7.6,23.4,12.4c7.8,4.8,15.5,11.5,23,19.9c6.9,2.2,13.8,3.1,20.9,2.8
|
||||
c7-0.3,14-1.6,20.9-3.8l3.3-12.7c6.6,7.2,12.7,14.7,18.5,22.5c5.8,7.8,10.5,16.6,14.3,26.3c5.3,5,11.3,9.1,17.8,12.2
|
||||
c6.6,3.1,13.9,4.5,22,4.2l7-8.4c4.1,8.1,7.6,17.3,10.5,27.7c3,10.3,5.1,22,6.3,35.2c4.4,5.3,9.1,10.2,14.3,14.8
|
||||
c5.2,4.5,10.9,8.4,17.1,11.5L273.3,381.5l14.5,7.5c-3.4,15.3-12.4,22.7-27,22.3s-23.5-7.6-27-21.3L249.4,382.4z M186.2,304.1
|
||||
l-4.7,15.5l-17.8,9.4l80.6,42.2L186.2,304.1z M218.5,279.7l-9.4,11.3l-20.2,3.8l60,69.8L218.5,279.7z M256.5,361.3v-90.9l-13.1,7
|
||||
l-20.6-6.6L256.5,361.3z M264.9,363.6l31.4-84.8l-15,0.5l-16.9-14.1L264.9,363.6z M328.7,299.4l-7.5-1.9l-17.3-22l-31.4,89.1
|
||||
L328.7,299.4z M353,332.7l-8-7.5l-5.6-26.3l-59.5,71.7L353,332.7z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="list_-_copie">
|
||||
<g class="st1">
|
||||
<path d="M31,258.6c0-30.9,5.9-60.2,17.8-87.7c11.6-27.2,27.6-51,48-71.5c20.5-20.5,44.3-36.5,71.5-48
|
||||
c27.5-11.9,56.7-17.8,87.7-17.8s60.2,5.9,87.7,17.8c27.2,11.6,51,27.6,71.5,48c20.5,20.5,36.5,44.3,48,71.5
|
||||
c11.9,27.5,17.8,56.7,17.8,87.7s-5.9,60.2-17.8,87.7c-11.6,27.2-27.6,51-48,71.5c-20.5,20.5-44.3,36.5-71.5,48
|
||||
c-27.5,11.9-56.7,17.8-87.7,17.8s-60.2-5.9-87.7-17.8c-27.2-11.6-51-27.6-71.5-48c-20.5-20.5-36.5-44.3-48-71.5
|
||||
C36.9,318.8,31,289.6,31,258.6z M467.4,258.6c0-29.1-5.5-56.6-16.4-82.5c-11.3-25.6-26.4-48-45.5-67
|
||||
c-19.1-19.1-41.4-34.2-67-45.5c-25.9-10.9-53.4-16.4-82.5-16.4s-56.6,5.5-82.5,16.4c-25.6,11.3-48,26.4-67,45.5
|
||||
c-19.1,19.1-34.2,41.4-45.5,67c-10.9,25.9-16.4,53.4-16.4,82.5s5.5,56.6,16.4,82.5c11.3,25.6,26.4,48,45.5,67
|
||||
c19.1,19.1,41.4,34.2,67,45.5c25.9,10.9,53.4,16.4,82.5,16.4s56.6-5.5,82.5-16.4c25.6-11.3,48-26.4,67-45.5
|
||||
c19.1-19.1,34.2-41.4,45.5-67C461.9,315.2,467.4,287.7,467.4,258.6z M75.1,182.2c10.3-24.1,24.3-45,42-62.8
|
||||
c17.7-17.8,38.5-31.9,62.6-42.2c23.7-10.3,49.2-15.5,76.4-15.5s52.7,5.2,76.4,15.5c24.1,10.3,45,24.4,62.8,42.2
|
||||
s31.9,38.8,42.2,62.8c10.3,23.8,15.5,49.2,15.5,76.4s-5.2,52.7-15.5,76.4c-10.3,24.1-24.4,45-42.2,62.8s-38.8,31.9-62.8,42.2
|
||||
c-23.8,10.3-49.2,15.5-76.4,15.5s-52.7-5.2-76.4-15.5c-24.1-10.3-44.9-24.4-62.6-42.2c-17.7-17.8-31.6-38.7-42-62.8
|
||||
c-10.3-23.7-15.5-49.2-15.5-76.4S64.8,206,75.1,182.2z M190.6,305.1c13.6-5.6,24.8-16.2,33.5-31.9c-0.3-0.3-0.5-0.6-0.5-0.9
|
||||
c0-0.3-0.2-0.6-0.5-0.9c-11.9-3.8-23.4-5.3-34.5-4.7c-11.1,0.6-22,3-32.6,7c-2.2,4.1-5.5,7.3-9.8,9.6c-4.4,2.3-9.1,3.5-14.1,3.5
|
||||
c-7.8,0-14.5-2.7-19.9-8.2c-5.5-5.5-8.2-12.1-8.2-19.9c0-7.8,2.7-14.5,8.2-19.9c5.5-5.5,12.1-8.2,19.9-8.2c5,0,9.7,1.2,14.1,3.5
|
||||
c4.4,2.3,7.7,5.6,9.8,9.6c10.6,4.1,21.5,6.4,32.6,7c11.1,0.6,22.6-0.9,34.5-4.7c0.3-0.3,0.5-0.6,0.5-0.9c0-0.3,0.2-0.6,0.5-0.9
|
||||
c-11.3-20-26.3-33-45.2-39.1c-18.9-6.1-37.3-25.4-55.1-57.9c-12.8,15-22.8,32-30,51.1C86.6,217.2,83,237.4,83,258.6
|
||||
c0,21.3,3.6,41.4,10.8,60.5c7.2,19.1,17.2,36.1,30,51.1c4.1-7.5,8.1-14.1,12.2-19.7c4.1-5.6,8.3-10.5,12.7-14.5
|
||||
C163,321,177,310.7,190.6,305.1z M248,191.4c-0.6-11.1-3-21.8-7-32.1c-4.1-2.5-7.3-5.9-9.6-10.3c-2.3-4.4-3.5-9.1-3.5-14.1
|
||||
c0-7.8,2.7-14.5,8.2-19.9c5.5-5.5,12.1-8.2,19.9-8.2c7.8,0,14.5,2.7,19.9,8.2c5.5,5.5,8.2,12.1,8.2,19.9c0,5-1.2,9.7-3.5,14.1
|
||||
c-2.3,4.4-5.6,7.8-9.6,10.3c-4.1,10.3-6.4,21-7,32.1c-0.6,11.1,0.9,22.6,4.7,34.5c0.3,0.3,0.6,0.5,0.9,0.5c0.3,0,0.6,0.2,0.9,0.5
|
||||
c20-11.3,33-26.3,39.1-45.2c6.1-18.9,25.4-37.3,57.9-55.1c-15-12.8-32-22.8-51.1-30c-19.1-7.2-39.2-10.8-60.5-10.8
|
||||
c-21.3,0-41.4,3.6-60.5,10.8c-19.1,7.2-36.1,17.2-51.1,30c7.5,4.1,14.1,8.1,19.7,12.2c5.6,4.1,10.5,8.3,14.5,12.7
|
||||
c15,14.4,25.3,28.4,30.9,42s16.2,24.8,31.9,33.5c0.3-0.3,0.6-0.5,0.9-0.5c0.3,0,0.6-0.2,0.9-0.5C247.1,214,248.7,202.5,248,191.4
|
||||
z M347.9,378.6c-5.6-4.1-10.5-8.3-14.5-12.7c-15-14.4-25.3-28.4-30.9-42s-16.3-24.8-31.9-33.5c-0.3,0.3-0.6,0.5-0.9,0.5
|
||||
c-0.3,0-0.6,0.2-0.9,0.5c-3.8,11.9-5.3,23.4-4.7,34.5c0.6,11.1,3,22,7,32.6c4.1,2.2,7.3,5.5,9.6,9.8c2.3,4.4,3.5,9.1,3.5,14.1
|
||||
c0,7.8-2.7,14.5-8.2,19.9c-5.5,5.5-12.1,8.2-19.9,8.2c-7.8,0-14.5-2.7-19.9-8.2c-5.5-5.5-8.2-12.1-8.2-19.9c0-5,1.2-9.7,3.5-14.1
|
||||
c2.3-4.4,5.5-7.7,9.6-9.8c4.1-10.6,6.4-21.5,7-32.6c0.6-11.1-0.9-22.6-4.7-34.5c-0.3-0.3-0.6-0.5-0.9-0.5c-0.3,0-0.6-0.2-0.9-0.5
|
||||
c-20,11.3-33,26.3-39.1,45.2c-6.1,18.9-25.4,37.3-57.9,55.1c15,12.8,32,22.8,51.1,30c19.1,7.2,39.2,10.8,60.5,10.8
|
||||
c21.2,0,41.4-3.6,60.5-10.8c19.1-7.2,36.1-17.2,51.1-30C360.1,386.8,353.5,382.7,347.9,378.6z M418.2,198.2
|
||||
c-7.2-19.1-17.2-36.1-30-51.1c-4.1,7.5-8.1,14.1-12.2,19.7c-4.1,5.6-8.3,10.5-12.7,14.5c-14.4,15-28.4,25.3-42,30.9
|
||||
s-24.8,16.3-33.5,31.9c0.3,0.3,0.5,0.6,0.5,0.9c0,0.3,0.2,0.6,0.5,0.9c11.9,3.8,23.4,5.3,34.5,4.7c11.1-0.6,21.8-3,32.1-7
|
||||
c2.5-4.1,5.9-7.3,10.3-9.6c4.4-2.3,9.1-3.5,14.1-3.5c7.8,0,14.5,2.7,19.9,8.2c5.5,5.5,8.2,12.1,8.2,19.9c0,7.8-2.7,14.5-8.2,19.9
|
||||
c-5.5,5.5-12.1,8.2-19.9,8.2c-5,0-9.7-1.2-14.1-3.5c-4.4-2.3-7.8-5.5-10.3-9.6c-10.3-4.1-21-6.4-32.1-7
|
||||
c-11.1-0.6-22.6,0.9-34.5,4.7c-0.3,0.3-0.5,0.6-0.5,0.9c0,0.3-0.2,0.6-0.5,0.9c11.3,20,26.3,33,45.2,39.1
|
||||
c18.9,6.1,37.3,25.4,55.1,57.9c12.8-15,22.8-32,30-51.1c7.2-19.1,10.8-39.2,10.8-60.5C429,237.4,425.4,217.2,418.2,198.2z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Techs">
|
||||
<g id="Kihos" class="st0">
|
||||
<g class="st1">
|
||||
<path class="st13" d="M103.9,383.6c-8-5.8-11-15.5-9.1-29.3c16.9-1.6,33.5-3.4,49.9-5.6c16.4-2.2,32.4-2.8,48-1.9
|
||||
c-0.6-20.3,5.2-35.9,17.6-46.6c12.3-10.8,25.7-17.6,40.1-20.4c13.4-2.8,22.7-8.4,27.9-16.9s5.4-16.7,0.7-24.8
|
||||
c-2.2-4.4-4.9-8.5-8.2-12.4c-3.3-3.9-6.8-7.4-10.5-10.5c-1.9-1.9-4-3.2-6.3-4c-2.3-0.8-4.5-1.9-6.3-3.5c-1.9-1.9-3.4-4-4.7-6.3
|
||||
c-1.3-2.3-3-4.1-5.2-5.4c-1.9-1.2-4.1-2-6.8-2.3c-2.7-0.3-5.2-0.5-7.7-0.5c-2.8,0.3-5.5,1.1-8,2.3c-2.5,1.3-5,2.7-7.5,4.2
|
||||
c-1.9,1.3-3.7,2.9-5.4,4.9c-1.7,2-3.4,4-4.9,5.9c-1.6,1.3-3.3,2.4-5.2,3.5c-1.9,1.1-3,2.7-3.3,4.9c-0.3,1.3-0.1,2.4,0.7,3.5
|
||||
c0.8,1.1,1.5,2.3,2.1,3.5c5.3-0.6,10.9-1,16.9-1.2c5.9-0.2,12.2-0.1,18.8,0.2c5.3,0.3,10.3,1.6,15,4s5.2,4.6,1.4,6.8
|
||||
c-2.5,1.3-3.9,2.8-4.2,4.7c-0.3,1.9,1.6,2.7,5.6,2.3h9.4c3.8-0.3,6.2,0.9,7.5,3.5c1.2,2.7,0,4.5-3.8,5.4
|
||||
c-8.1,1.6-16.2,2.7-24.1,3.5c-8,0.8-15.9,1-23.7,0.7l0.9,2.3c-3.1,2.5-6.4,4.4-9.8,5.6c-3.4,1.3-7,1.9-10.8,1.9l-47.8-1.4
|
||||
c-2.5-0.3-4.8-0.9-7-1.6c-2.2-0.8-4.2-1.8-6.1-3h-9.4l-2.8-3.3c-9.4,1.6-17.7,1.7-25.1,0.5c-7.3-1.2-9.1-3.4-5.4-6.6l3.8-3.3
|
||||
l-3.3-3.8l-20.6-2.3c-7.5-0.6-10.5-3-9.1-7c1.4-4.1,5.9-5.9,13.4-5.6l37,2.8c3.4,0.3,6-0.9,7.7-3.8c1.7-2.8,4.8-3.8,9.1-2.8
|
||||
c5.6,0.9,11.2,1.6,16.6,1.9c5.5,0.3,10.9,0.2,16.2-0.5c2.5-3.4,5.3-6.6,8.4-9.6c3.1-3,6.4-5.7,9.8-8.2c1.2-0.9,2.7-1.8,4.5-2.6
|
||||
c1.7-0.8,3.4-1.6,4.9-2.6c1.9-0.6,3.8-1.2,5.9-1.9c2-0.6,3.8-1.6,5.4-2.8c1.6-1.6,2.7-3.5,3.3-5.9c0.6-2.3,1.7-4.5,3.3-6.3
|
||||
c1.2-1.2,2.6-2.6,4-4s3-2.4,4.9-3c1.6-0.3,3.2-0.2,4.9,0.5c1.7,0.6,3.4,1.1,4.9,1.4c1.2,0.3,2.5,0.5,3.8,0.7
|
||||
c1.2,0.2,2.5,0.4,3.8,0.7c0.9,0.3,1.9,0.8,3,1.4c1.1,0.6,2.3,1.3,3.5,1.9c0.9,0.3,1.8,0.5,2.6,0.7c0.8,0.2,1.6,0.4,2.6,0.7
|
||||
c0.3,0,0.6,0.2,0.9,0.5l-18.3-15.9c-0.6-0.6-1.6-1.2-2.8-1.6c-1.3-0.5-2.5-0.9-3.8-1.2c-1.9,0-3.8,0.4-5.9,1.2
|
||||
c-2,0.8-4.1,1.2-6.3,1.2c-1.6,0.3-3.3,0.4-5.2,0.2c-1.9-0.2-3.6-0.4-5.2-0.7c-1.9,0-3.6-0.2-5.2-0.5c-1.6-0.3-3.1-0.8-4.7-1.4
|
||||
l-6.1-1.9l9.8-1.9c1.6-0.3,3.3-0.6,5.2-0.9c1.9-0.3,3.1-1.1,3.8-2.3c0.6-0.6,0.9-1.6,0.7-2.8c-0.2-1.2-0.5-2.2-1.2-2.8
|
||||
c-1.3-0.9-2.7-1.2-4.5-0.9c-1.7,0.3-3.2,0.6-4.5,0.9c-1.3,0-2.3,0.3-3,0.9c-0.8,0.6-1.6,1.1-2.6,1.4c-1.9,0.6-3.7,0.9-5.4,0.9
|
||||
c-1.7,0-3.5,0.2-5.4,0.5c-2.5,0.3-4.9,0.8-7.3,1.4c-2.3,0.6-4.8,1.3-7.3,1.9c-2.5,0.3-5.1,0.5-7.7,0.7c-2.7,0.2-5.2,0.2-7.7,0.2
|
||||
c-1.9,0-3.9,0-6.1,0c-2.2,0-4.4-0.2-6.6-0.5c-1.9-0.3-3.7-0.6-5.4-0.9c-1.7-0.3-3.5-0.8-5.4-1.4c-1.6-0.9-3-2-4.5-3.3
|
||||
c-1.4-1.2-3-2.2-4.9-2.8c-1.3-0.6-2.7-1.1-4.2-1.4c-1.6-0.3-3-0.5-4.2-0.5c-3.1-0.6-6.3-0.9-9.4-0.7c-3.1,0.2-6.1,0.1-8.9-0.2
|
||||
c-2.2,0-4.3,0.1-6.3,0.2c-2,0.2-4.1-0.2-6.3-1.2c-0.3,0-0.7-0.2-1.2-0.5c-0.5-0.3-0.7-0.6-0.7-0.9c-0.3-0.9,0-1.7,0.9-2.3
|
||||
c0.9-0.6,1.7-1.2,2.3-1.9c1.6-1.2,3.3-2.1,5.2-2.6s3.8-1,5.6-1.6c1.2-0.3,2.7-0.5,4.2-0.5c1.6,0,3-0.3,4.2-0.9
|
||||
c1.2-0.3,2.4-0.9,3.5-1.6c1.1-0.8,1.6-1.8,1.6-3c0-0.9-0.5-1.6-1.4-2.1s-1.7-0.9-2.3-1.2c-1.9-0.6-3.7-0.9-5.4-0.7
|
||||
c-1.7,0.2-3.5,0.2-5.4,0.2c-5.6-0.3-11.3-0.4-16.9-0.2c-5.6,0.2-11.1,0.2-16.4,0.2c-1.3,0-2.5,0.2-3.8,0.5
|
||||
c-1.3,0.3-2.5,0.3-3.8,0c-1.3-0.3-2.5-0.8-3.8-1.4c-1.3-0.6-2-1.6-2.3-2.8c-0.6-0.9-0.9-1.9-0.7-3c0.2-1.1,0.4-2.1,0.7-3
|
||||
c0.3-0.9,0.9-1.7,1.6-2.3c0.8-0.6,1.2-1.2,1.2-1.9c-0.3-1.2-1.3-2-2.8-2.3c-1.6-0.3-2.7-1.1-3.3-2.3c0-0.9,0.1-1.9,0.2-2.8
|
||||
c0.2-0.9,0.5-1.7,1.2-2.3c0.9-1.2,2.3-2,4.2-2.3c1.9-0.3,3.6-0.6,5.2-0.9c7.2-1.2,14.5-1.7,22-1.4c7.5,0.3,14.8,0.2,22-0.5h2.3
|
||||
c2.2-3.4,6.6-6.3,13.1-8.7s12.7-3.8,18.3-4.5c8.4-1.2,17-1.1,25.8,0.5c8.7,1.6,17.5,1.6,26.3,0c3.8-0.3,7.3-1.3,10.8-3
|
||||
c3.4-1.7,7-2.9,10.8-3.5c3.4-0.9,7-1.8,10.8-2.6c3.8-0.8,7.5-1,11.3-0.7c3.4,0,6.8,0.7,10.1,2.1s6.5,2.3,9.6,2.6
|
||||
c3.4,0.3,6.7,0.2,9.8-0.5c3.1-0.6,6.2-0.9,9.4-0.9c5.6,0.3,11.2,0.5,16.6,0.5c5.5,0,10.5,1.1,15.2,3.3c1.9,0.6,3.8,1.6,5.9,3
|
||||
c2,1.4,2.9,3,2.6,4.9c0,0.9-0.7,1.6-2.1,2.1s-2.7,0.9-4,1.2c-3.1,1.3-6.3,2.1-9.6,2.6s-6.6,1-10.1,1.6c-0.6,0.3-1.3,0.5-1.9,0.5
|
||||
c-0.6,0-1.1,0.3-1.4,0.9c-0.6,0.3-0.9,0.9-0.9,1.6c0,0.8-0.2,1.3-0.5,1.6c-0.9,0.6-1.9,0.9-2.8,0.7c-0.9-0.2-1.9,0.1-2.8,0.7
|
||||
c-0.6,0.3-1.3,0.7-1.9,1.2c-0.6,0.5-0.9,1-0.9,1.6c0,1.3,0.8,2.2,2.3,2.8c1.6,0.6,2.8,1.3,3.8,1.9c0.6,0.6,1.5,1.3,2.6,1.9
|
||||
c1.1,0.6,1.6,1.4,1.6,2.3c0.3,0.6,0.2,1.4-0.2,2.3s-1,1.7-1.6,2.3c-0.9,0.9-2,1.7-3.3,2.3c-1.3,0.6-2.5,1.3-3.8,1.9
|
||||
c-1.6,0.9-3.2,1.8-4.9,2.6c-1.7,0.8-3.5,1.3-5.4,1.6c-1.9,0.6-3.9,0.7-6.1,0.2c-2.2-0.5-4.1-0.2-5.6,0.7
|
||||
c-0.6,0.3-1.3,0.7-1.9,1.2c-0.6,0.5-0.9,1-0.9,1.6c0,0.6,0.3,1.1,0.9,1.4c0.6,0.3,1.2,0.6,1.9,0.9c0.9,0.3,2,0.3,3.3,0
|
||||
c1.2-0.3,2.5-0.3,3.8,0c1.9,0,3.8-0.1,5.6-0.2c1.9-0.2,3.3,0.4,4.2,1.6c0.3,0.3,0.5,0.8,0.5,1.4c0,0.6-0.2,1.1-0.5,1.4
|
||||
c-0.3,0.3-0.9,0.5-1.6,0.5c-0.8,0-1.5,0.2-2.1,0.5c-1.6,0-3.2,0-4.9,0c-1.7,0-3.4,0.2-4.9,0.5c-0.9,0.3-1.9,0.7-2.8,1.2
|
||||
s-1.6,1.2-1.9,2.1c-0.3,0.6-0.2,1.4,0.2,2.3s0.9,1.7,1.2,2.3c0.9,2.2,2.3,4.1,4,5.9c1.7,1.7,3.5,3.4,5.4,4.9
|
||||
c2.2,1.9,4.7,3.3,7.5,4.2s5.3,2.3,7.5,4.2c1.9,1.3,3.7,2.8,5.4,4.7c1.7,1.9,3.4,3.8,4.9,5.6c2.5,2.8,4.8,5.7,6.8,8.7
|
||||
c2,3,4.1,6,6.3,9.1c1.9,2.5,4.1,5,6.6,7.5c2.5,2.5,4.7,5.3,6.6,8.4c0.6,1.6,1.2,3,1.9,4.5c0.6,1.4,1.2,3,1.9,4.9
|
||||
c0-11.3,1.6-21.4,4.9-30.5c3.3-9.1,11.5-15,24.6-17.8c-1.3-0.9-2.7-1.7-4.5-2.3c-1.7-0.6-3.5-1.1-5.4-1.4c-2.2-0.6-4.5-0.7-7-0.2
|
||||
c-2.5,0.5-5,0.7-7.5,0.7c-2.8-0.3-5.7-0.4-8.7-0.2c-3,0.2-5.7-0.2-8.2-1.2c-2.5-0.6-5.1-1.5-7.7-2.6c-2.7-1.1-4.6-2.7-5.9-4.9
|
||||
c-0.9-1.9-1.3-4-0.9-6.3c0.3-2.3,1.1-4.5,2.3-6.3c1.6-2.2,3.8-3.8,6.6-4.7s5.6-1.7,8.4-2.3c3.4-0.9,6.9-1.5,10.3-1.6
|
||||
c3.4-0.2,7-0.4,10.8-0.7c2.8-0.3,5.6-0.7,8.4-1.2s5.5-1,8-1.6c2.8-0.6,5.4-1.4,7.7-2.3s4.8-1.9,7.3-2.8c3.4-0.9,6.8-1.7,10.1-2.3
|
||||
c3.3-0.6,6.6-1.2,10.1-1.9c3.8-0.3,7.7-0.4,11.7-0.2c4.1,0.2,8,0.2,11.7,0.2c1.9,0,3.7,0.2,5.4,0.5c1.7,0.3,3.4,0.5,4.9,0.5
|
||||
l18.8-1.4c1.9,0,3.8,0.5,5.9,1.4c2,0.9,3.4,2.2,4,3.8c0.3,0.6,0.3,1.4,0,2.3c-0.3,0.9-0.8,1.7-1.4,2.3c-0.3,0.6-0.8,1.2-1.4,1.6
|
||||
c-0.6,0.5-1.4,0.7-2.3,0.7c-0.9,0.3-1.8,0.2-2.6-0.5c-0.8-0.6-1.8-0.9-3-0.9h-9.4c-1.6,0-3,0.2-4.5,0.5c-1.4,0.3-2.9,0.8-4.5,1.4
|
||||
c-1.3,0.6-2.8,1.6-4.7,2.8c-1.9,1.3-2.7,2.7-2.3,4.2c0.3,1.9,1.5,3.1,3.5,3.8c2,0.6,4,0.9,5.9,0.9l49.2-0.9
|
||||
c1.9-0.3,3.8-0.4,5.9-0.2c2,0.2,4,0.5,5.9,1.2c0.9,0.6,1.9,1.2,2.8,1.6s1.6,1.2,1.9,2.1c0.3,0.9,0.3,1.9,0,2.8
|
||||
c-0.3,0.9-0.8,1.7-1.4,2.3c-1.6,1.3-3.5,1.3-5.9,0c-2.3-1.2-4.5-1.6-6.3-0.9c-0.6,0.3-1.2,0.8-1.6,1.4c-0.5,0.6-1,1.1-1.6,1.4
|
||||
c-1.9,0.3-3.8,0.2-5.6-0.5c-1.9-0.6-3.8-0.8-5.6-0.5c-0.3,0.3-0.8,0.5-1.4,0.7c-0.6,0.2-0.9,0.4-0.9,0.7c0,0.9,0.5,1.5,1.4,1.6
|
||||
c0.9,0.2,1.9,0.4,2.8,0.7c0.6,0,1.3-0.1,2.1-0.2c0.8-0.2,1.6-0.2,2.6-0.2c1.2,0.6,2.4,1.4,3.5,2.3c1.1,0.9,2.1,1.9,3,2.8
|
||||
c0.9,1.6,1.6,3.5,1.9,5.9c0.3,2.3,1.2,4.1,2.8,5.4c0.9,0.6,2,1,3.3,1.2c1.2,0.2,2.3,0.1,3.3-0.2c1.6,0,3-0.5,4.2-1.4
|
||||
c1.2-0.9,2.5-1.2,3.8-0.9c2.5,0,5.2,1,8,3c2.8,2,4.2,4.5,4.2,7.3c0,1.9-1.3,3.2-4,4c-2.7,0.8-5.1,1-7.3,0.7
|
||||
c-6.6,0.3-12.3,1.3-17.1,3c-4.8,1.7-8.8,4.5-12,8.2c0,0.3,0.1,0.6,0.2,0.9c0.2,0.3,0.4,0.5,0.7,0.5c0.3,0.3,0.7,0.4,1.2,0.2
|
||||
c0.5-0.2,0.9-0.2,1.2-0.2c0.9-0.3,1.7-0.5,2.3-0.5c0.6,0,1.4,0,2.3,0s1.9,0.1,2.8,0.2c0.9,0.2,1.7,0.5,2.3,1.2
|
||||
c0.3,0.6,0.4,1.4,0.2,2.3c-0.2,0.9-0.4,1.7-0.7,2.3c-0.6,0.9-1.6,1.6-2.8,1.9c-1.3,0.3-2.3,0.6-3.3,0.9c-2.2,0.6-4.5,1.3-7,1.9
|
||||
c-2.5,0.6-4.8,1.1-7,1.4c-2.2,0.3-4.4,0.5-6.6,0.7c-2.2,0.2-4.4,0.4-6.6,0.7c-1.3,0-2.5,0.1-3.8,0.2c-1.3,0.2-2.7,0.2-4.2,0.2
|
||||
c-4.1,0-8.2-0.4-12.4-1.2c-4.2-0.8-8.4-1.3-12.4-1.6c-6.6-0.6-13.2-0.9-19.9-0.7c-6.7,0.2-13.4-0.4-19.9-1.6
|
||||
c-1.6-0.3-3.3-0.6-5.2-0.9c-1.9-0.3-3.6-0.9-5.2-1.9c-0.3-0.3-0.6-0.7-0.9-1.2c-0.3-0.5-0.3-0.9,0-1.2c0.6-1.2,1.9-1.6,3.8-0.9
|
||||
c1.9,0.6,3.4,0.6,4.7,0c0.3-0.3,0.6-0.6,0.9-0.9c0.3-0.3,0.5-0.6,0.5-0.9c-0.3-1.2-1.3-1.9-3-1.9c-1.7,0-3.2-0.2-4.5-0.5
|
||||
c-1.6-0.3-3-0.4-4.5-0.2c-1.4,0.2-2.7-0.1-4-0.7c-0.9-0.6-1.9-1.3-2.8-2.1c-0.9-0.8-1.3-1.6-0.9-2.6c0-0.6,0.5-1.2,1.4-1.6
|
||||
s1.7-0.9,2.3-1.2c1.2-0.9,2.7-1.6,4.5-1.9c1.7-0.3,2.9-1.2,3.5-2.8c-9.4-0.6-16.5,2.3-21.3,8.7c-4.8,6.4-6,15.4-3.5,27
|
||||
c4.4,20,0.9,36.9-10.3,50.6c-11.3,13.8-22.8,21.6-34.7,23.4c-24.7,4.1-38.8,11.3-42.2,21.6c-3.4,10.3,4.2,25.8,23,46.4l0.9-0.5
|
||||
c-4.1-6.6-6.3-12.2-6.6-16.9c-0.3-4.7,1.2-7.2,4.7-7.5c17.2-0.9,34.9-1.2,53.2-0.9c18.3,0.3,37.3,1.7,57,4.2
|
||||
c1.2,14.1-1.7,24.3-8.9,30.7c-7.2,6.4-17.7,9.8-31.4,10.1c1.2,15.3-6.6,26.3-23.7,32.8c-17,6.6-40.7,10.5-71,11.7
|
||||
c-30.3,1.3-54.4-3-72.2-12.7c-17.8-9.7-21.1-20.9-9.8-33.8C124.3,391.8,111.9,389.4,103.9,383.6z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Maho" class="st0">
|
||||
<g class="st1">
|
||||
<path class="st14" d="M150.5,404l3.3-1.9v-2.8l-0.9-0.9v-7.5l15.5-6.1l2.8-3.8l-3.3-4.2l-7-1.9l-5.2,6.6l1.4-7L146.3,388
|
||||
l2.8-12.7l-6.1,6.6l0.9-8.9l-4.7,6.1h-2.8l-6.6,10.3c1.9-4.7,3.5-9.4,4.9-14.3c1.4-4.8,2.4-9.6,3-14.3l-4.2-0.5l-4.7,3.8
|
||||
l-0.5-4.2c-6.3,3.4-11.9,8.5-16.9,15.2c-5,6.7-10.2,13.4-15.5,19.9c3.1-5.3,6.5-10.7,10.1-16.2c3.6-5.5,7.6-10.9,12-16.2
|
||||
l-4.7,0.5l1.4-4.7c-5.6,3.8-10.8,8.1-15.5,13.1c-4.7,5-7.8,11.7-9.4,20.2c-0.3-3.1-0.5-6.2-0.5-9.1c0-3,0.2-6,0.5-9.1l-3.3-2.3
|
||||
l-3.3,2.8c-0.6-2.8-0.2-5.7,1.2-8.7c1.4-3,3.5-5.9,6.3-8.7c-3.1-5.9-6.8-10.3-11-13.1s-8.7-4.8-13.4-6.1c4.1-2.2,6-4.6,5.9-7.3
|
||||
c-0.2-2.7-1.5-5.5-4-8.7c-2.5-2.2-4.7-4.6-6.6-7.3c-1.9-2.7-3.8-5.4-5.6-8.2l8.4-8.9c-8.1-9.7-13.6-18.7-16.4-27
|
||||
c-2.8-8.3-3.4-15.7-1.9-22.3c10,11.9,20.8,22.9,32.3,33c11.6,10.2,25,18.4,40.3,24.6c7.2,2.2,12.4,2,15.7-0.7
|
||||
c3.3-2.7,4.6-7.6,4-14.8l-29.5-82.5c-3.4-10.3-4.4-21-2.8-32.1c1.6-11.1,6.6-21.3,15-30.7l30.9-33.3l-2.3,7
|
||||
c10.6-5,18-14.3,22.3-27.9s6.6-27.1,7.3-40.5l1.9-5.2c1.2,14.4,0.3,28.4-2.8,42.2c-3.1,13.8-10,26.9-20.6,39.4l9.8-8.4
|
||||
l-26.3,37.5c-5.3,6.9-8.8,14.5-10.3,22.7c-1.6,8.3-0.6,17.4,2.8,27.4c4.1,15.9,9.7,31.1,16.9,45.5c7.2,14.4,15.6,28.1,25.3,41.3
|
||||
c2.2-2.5,4.4-3.6,6.6-3.3c2.2,0.3,4.5,1.9,7,4.7c1.2-2.8,1.5-6.5,0.7-11c-0.8-4.5-1.8-9.1-3-13.8l8,18.8l-1.4-9.4l10.8,22h2.8
|
||||
l6.1,8l3.3-6.6l9.8,0.9l0.5-3.3l2.8,3.3l-0.5-7l2.8-2.3l1.9,2.8l-7-47.3c-2.2-17.2-3.1-27.7-2.8-31.6c0.3-3.9,1.9-10.7,4.7-20.4
|
||||
l12.2-36.6l9.8-2.8l0.9,9.4l-8.9,49.2c-1.3,5.9-2.1,11.8-2.6,17.6c-0.5,5.8-0.1,12,1.2,18.5l15.9,52.5l2.3-3.3l1.4,5.6l8.4-3.8
|
||||
l0.5,5.6l7,0.5c0.6-2.2,1.4-4.3,2.3-6.3c0.9-2,2-4,3.3-5.9l1.4,8.4l2.8,1.9l1.9,1.9l0.5-4.2l2.8-0.9c0.9-5.3,2.3-10.6,4.2-15.9
|
||||
c1.9-5.3,3.9-10.5,6.1-15.5c-1.3,3.8-2.3,7.6-3.3,11.5c-0.9,3.9-1.6,7.7-1.9,11.5l3.3-0.9c0-3.8,0.6-7.3,1.9-10.5
|
||||
c1.2-3.3,2.7-6.5,4.2-9.6c-0.6,3.1-1.2,6.3-1.6,9.4c-0.5,3.1-0.4,6.3,0.2,9.4h2.8l5.2,4.2h3.3c6.6-8.7,13.4-20.8,20.4-36.1
|
||||
c7-15.3,14.1-33.6,21.3-54.8c4.1-11.3,5.2-22.1,3.3-32.6c-1.9-10.5-4.8-20.7-8.9-30.7c-7.8-15.3-17.3-28.8-28.6-40.5
|
||||
S309.6,68,313.7,33.6c-0.6,12.2,0.6,23.5,3.8,34c3.1,10.5,9.5,19.8,19.2,27.9l-9.8-22l52,68c6.2,11.6,10.1,23.7,11.5,36.3
|
||||
s-0.9,26.6-6.8,42c-5,15-10.1,30.1-15.2,45.2c-5.2,15.2-8.7,29.3-10.5,42.4c19.4-4.4,37.9-13.3,55.5-26.7
|
||||
c17.7-13.4,34.6-30.3,50.9-50.6l-6.6,17.3l5.6-8l3.3,5.2c0.6,4.7-1.6,12-6.8,21.8s-6.3,18-3.5,24.6c-7.2,3.4-12.1,8.3-14.8,14.5
|
||||
c-2.7,6.3-1.3,15.2,4,26.7c1.6,3.8,2.9,7.5,4,11.3c1.1,3.8,1.3,7.7,0.7,11.7c-1.3-3.4-2.8-6.2-4.7-8.4c-1.9-2.2-4.4-3.8-7.5-4.7
|
||||
l-1.4,20.2c-1.3-1.6-2.5-2.9-3.8-4c-1.3-1.1-2.7-1.9-4.2-2.6l-2.8,5.6l-4.2-4.7l-1.9,0.9l7,8l-4.7,0.5l3.3,6.6l-4.7-3.8l-2.8,1.4
|
||||
v4.7l-4.2-4.2l-5.2-0.5c1.9,3.1,3.4,6.3,4.7,9.6c1.2,3.3,1.9,6.5,1.9,9.6c-1.9-5-4-9.3-6.3-12.9c-2.3-3.6-4.9-6.6-7.7-9.1
|
||||
c0.9,5.6,2,11.1,3.3,16.4c1.2,5.3,2.5,10.8,3.8,16.4c-3.4-9.7-7.7-18-12.7-25.1c-5-7-10.9-12.4-17.8-16.2l8.9,10.3l-6.6-4.2
|
||||
l0.5,2.8c2.5,2.8,5.1,5.7,7.7,8.7c2.7,3,5.4,6.2,8.2,9.6c-3.1-2.8-6.2-5.5-9.1-8.2c-3-2.7-6-5.4-9.1-8.2l0.9,4.2
|
||||
c-2.2-1.9-4.5-3.7-6.8-5.4c-2.3-1.7-4.6-3.2-6.8-4.5c6.6,8.8,11.6,16.7,15.2,23.9c3.6,7.2,5.9,13.9,6.8,20.2
|
||||
c-4.1-8.7-8.3-16.6-12.7-23.4c-4.4-6.9-8.9-13-13.6-18.3l-5.2,2.8l12.2,23.4l-5.6-4.2l-0.9,3.3l-1.4-8l-3.3-2.3l-1.9,3.3
|
||||
l-1.9-2.8l-8.9-9.4l6.1,12.7l-10.8-9.4l8.9,18.3l-15-21.1l-1.4,4.7l7,8.9v3.3l-2.8,6.1l3.8,2.3v6.6c-1.9,5.6-4.2,10.8-7,15.5
|
||||
s-5.6,9.2-8.4,13.6l-2.3,2.3l-1.9,4.7c-12.5,7.5-25,14.8-37.5,22c-12.5,7.2-23.4,14.1-32.8,20.6c-16.9-9.4-35.3-18.7-55.3-27.9
|
||||
c-20-9.2-34.5-24.3-43.6-45.2L150.5,404z M216.2,346.1c2.2-0.5,4.8-0.5,8-0.2c-13.4-12.5-25.2-21-35.4-25.5
|
||||
c-10.2-4.5-17.6-2.4-22.3,6.3c7.2,11.3,14.5,19.1,21.8,23.4c7.3,4.4,14.6,3.9,21.8-1.4C211.9,347.4,214,346.5,216.2,346.1z
|
||||
M317.4,338.3c1.9-1.9,3.4-3.7,4.5-5.4c1.1-1.7,1.3-3.4,0.7-4.9c-4.4-5.6-15.3-5.9-32.8-0.7c-17.5,5.2-26.3,12.1-26.3,20.9
|
||||
l23,14.1c5.3-1.6,10.7-4.1,16.2-7.5c5.5-3.4,11-7.3,16.6-11.7L317.4,338.3z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Ninjutsu" class="st0">
|
||||
<g class="st1">
|
||||
<path d="M218,332.7v-0.9l-0.5-0.5c-13.4,8.4-27.3,15.5-41.7,21.1c-14.7,5.3-29.8,9.4-45.5,12.2c-15.6,2.8-31.7,4.5-48.3,5.2
|
||||
c-16.6,0.6-33.6,0.3-51.1-0.9c7.8-12.2,16.2-24.1,25.3-35.6c9.1-11.6,19.3-22.6,30.7-33c11.4-10.5,24-20.2,37.7-29.3
|
||||
c13.7-9.1,29.2-17.3,46.4-24.8l10.8-25.3h0.9l0.5-0.5c-8.4-13.4-15.5-27.3-21.1-41.7c-5.3-14.7-9.4-29.8-12.2-45.5
|
||||
c-2.8-15.6-4.5-31.7-5.2-48.3c-0.6-16.6-0.3-33.6,0.9-51.1c12.2,7.8,24.1,16.3,35.6,25.3c11.6,9.1,22.6,19.3,33,30.7
|
||||
c10.5,11.4,20.2,24,29.3,37.7c9.1,13.8,17.3,29.2,24.8,46.4l25.3,10.8v0.9l0.5,0.5c13.4-8.4,27.3-15.5,41.7-21.1
|
||||
c14.7-5.3,29.8-9.4,45.5-12.2c15.6-2.8,31.7-4.5,48.3-5.2c16.6-0.6,33.6-0.3,51.1,0.9c-7.8,12.2-16.3,24.1-25.3,35.6
|
||||
c-9.1,11.6-19.3,22.6-30.7,33c-11.4,10.5-24,20.2-37.7,29.3c-13.8,9.1-29.2,17.3-46.4,24.8l-10.8,25.3h-0.9l-0.5,0.5
|
||||
c8.4,13.4,15.5,27.3,21.1,41.7c5.3,14.7,9.4,29.8,12.2,45.5c2.8,15.6,4.5,31.7,5.2,48.3c0.6,16.6,0.3,33.6-0.9,51.1
|
||||
c-12.2-7.8-24.1-16.2-35.6-25.3c-11.6-9.1-22.6-19.3-33-30.7c-10.5-11.4-20.2-24-29.3-37.7c-9.1-13.7-17.3-29.2-24.8-46.4
|
||||
L218,332.7z M296.3,258.6c0-11.3-3.9-20.8-11.7-28.6c-7.8-7.8-17.3-11.7-28.6-11.7s-20.8,3.9-28.6,11.7
|
||||
c-7.8,7.8-11.7,17.3-11.7,28.6s3.9,20.8,11.7,28.6c7.8,7.8,17.3,11.7,28.6,11.7s20.8-3.9,28.6-11.7
|
||||
C292.4,279.4,296.3,269.9,296.3,258.6z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="unknow" class="st0">
|
||||
<g class="st1">
|
||||
<path d="M176.3,350.1c-15.6-11.3-31.3-21.8-46.9-31.6c-15.6-9.8-31.3-19-46.9-27.4c-15.9-8.4-31.7-16.4-47.3-23.9
|
||||
c-2.5-1.9-3.8-3.8-4-5.9c-0.2-2,1-4.3,3.5-6.8c16.6-7.5,33.4-16.9,50.6-28.1c17.2-10.9,34.8-22.7,53-35.2
|
||||
c18.1-12.5,36.6-25.2,55.3-38c19.1-12.5,38.4-24.2,58.1-35.2c15,14.1,31.9,26.7,50.6,38s38.3,22.3,58.6,33
|
||||
c20.3,10.8,40.8,22.1,61.4,34c20.3,11.6,39.8,24.8,58.6,39.8c-15.9,10-32,19.8-48.3,29.5c-15.9,9.4-31.8,18.8-47.6,28.4
|
||||
c-15.8,9.5-31.3,19.3-46.6,29.3c-15.3,10-30.3,20.8-45,32.3c-10.9,9.4-22.2,14.8-33.8,16.4c-11.6,1.6-23.6-2.5-36.1-12.2
|
||||
C207.7,373.8,191.9,361.6,176.3,350.1z M368.5,214.1c-13.8-7.8-27.3-15.9-40.5-24.1c-13.3-8.3-26.3-16.8-39.1-25.5
|
||||
c-13.1-8.4-26.1-17.3-38.9-26.7c-14.7,9.1-28.8,18.3-42.2,27.7c-13.8,9.1-27,18.2-39.8,27.4c-12.8,9.2-25.2,18.5-37,27.9
|
||||
c-11.6,9.1-22.8,18.3-33.8,27.7c13.4,6.9,26.9,14.1,40.3,21.6c13.1,7.8,26.3,15.7,39.4,23.7s26.1,16.2,38.9,24.6
|
||||
c13.1,8.8,25.9,17.5,38.4,26.3c11.6-9.4,23.6-18.6,36.1-27.7c12.2-9.4,24.8-18.5,37.7-27.4c13-8.9,26.2-17.7,39.6-26.5
|
||||
c13.4-8.7,27.3-17.5,41.7-26.3C395.5,229.4,381.9,221.9,368.5,214.1z M160.4,244.1c14.7-12.2,29.9-22.2,45.7-30
|
||||
c15.8-7.8,30.9-18.9,45.2-33.3c12.5,9.1,25.5,17.7,38.9,26c13.4,8.3,27.5,16.3,42.2,24.1c1.9,1.3,3.4,2.8,4.7,4.7
|
||||
c1.2,1.9,1.2,4.8,0,8.9c-19.1,4.1-35,12.6-47.8,25.5c-12.8,13-25.9,23.7-39.4,32.1c-8.8-12.2-21.1-22.9-37-32.1
|
||||
C196.9,260.9,179.4,252.2,160.4,244.1z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Rituals" class="st0">
|
||||
<g class="st1">
|
||||
<path class="st15" d="M115.1,440.3c9.5-9.5,13.7-20.7,12.4-33.5c-6.3-5.3-11.4-11.2-15.5-17.6c-4.1-6.4-6.6-13.5-7.5-21.3
|
||||
c-8.4-2.8-16-6.6-22.7-11.3c-6.7-4.7-12.9-10.3-18.5-16.9V313c6.9-8.1,15.4-14.3,25.5-18.5c10.2-4.2,21-7.4,32.6-9.6
|
||||
c9.7-16.6,22.1-28.4,37.3-35.4c15.2-7,30.9-11.5,47.1-13.4L146.3,98.3c10,0.3,18,2,24.1,5.2c6.1,3.1,9.1,8.4,9.1,15.9l36.6,115.8
|
||||
c6.9-0.6,13.5-1,19.9-1.2c6.4-0.2,12.6-0.2,18.5-0.2l-6.1-200.2c10.9,2.2,19,5.8,24.1,10.8c5.2,5,6.6,11.7,4.5,20.2l-11.7,169.2
|
||||
c4.7,0,9.4,0.1,14.1,0.2c4.7,0.2,9.4,0.4,14.1,0.7l35.2-112.5c-0.6-8.1,2.1-13.9,8.2-17.3c6.1-3.4,14.3-5.5,24.6-6.1l-58.6,136.9
|
||||
c16.6,1.9,32.8,6.3,48.8,13.1c15.9,6.9,28.9,18.9,38.9,36.1c11.9,2.2,22.9,5.4,33,9.6c10.2,4.2,18.7,10.4,25.5,18.5v26.7
|
||||
c-5.6,6.6-11.9,12.2-18.8,16.9c-6.9,4.7-14.5,8.4-23,11.3c-0.9,7.8-3.4,14.9-7.3,21.3c-3.9,6.4-9.1,12.3-15.7,17.6
|
||||
c-0.9,12.8,3.3,24,12.7,33.5c9.4,9.5,23.1,17.6,41.3,24.1c-9.4,16.6-24.8,22.3-46.2,17.1c-21.4-5.2-34.5-24.3-39.1-57.4
|
||||
c-14.1,5.6-29.5,9.8-46.4,12.4c-16.9,2.7-33.8,4-50.6,4c-16.6,0-33.4-1.3-50.4-4c-17-2.7-32.6-6.8-46.6-12.4
|
||||
c-4.7,33.1-17.7,52.3-38.9,57.4c-21.3,5.2-36.7-0.5-46.4-17.1C91.8,457.9,105.6,449.8,115.1,440.3z M361.5,272.9
|
||||
c-15.9-10.2-38-16.8-66.1-19.9l-11.7,27.2l-3.3-2.8l8-24.8c-4.1-0.3-8-0.6-12-0.9c-3.9-0.3-7.9-0.5-12-0.5l-1.9,24.8l-6.6,7.5
|
||||
l-0.9-32.3c-5.9,0-11.6,0.2-17.1,0.5c-5.5,0.3-10.9,0.6-16.2,0.9l8,24.8l-4.2,5.2l-12.2-29.1c-27.2,3.4-48.4,10.2-63.5,20.4
|
||||
c-15.2,10.2-22.7,23.5-22.7,40.1c0,7.5,4.2,13.3,12.7,17.3c8.4,4.1,19,7.1,31.6,9.1c12.7,2,26.6,3.4,42,4
|
||||
c15,0.3,29.2,0.6,42.7,0.9c13.4-0.3,27.8-0.6,43.1-0.9c15-0.6,28.9-1.9,41.7-4c12.8-2,23.4-5.1,31.9-9.1
|
||||
c8.4-4.1,12.7-9.8,12.7-17.3C385.4,296.8,377.4,283.1,361.5,272.9z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Shujis" class="st0">
|
||||
<g class="st1">
|
||||
<path class="st13" d="M99.2,415.7c-2.3-2.2-4.8-3.9-7.3-5.2c-34.1-19.1-53.8-55.2-59.1-108.3c-5.6-52.8,2.7-102.1,24.8-147.9
|
||||
c22.2-45.8,58-77.9,107.3-96.3c49.4-18.1,111.9-2.2,187.5,47.8c-46.3-20.3-89.1-26.4-128.4-18.3c-39.4,8.1-69.6,24.2-90.7,48.3
|
||||
c-21.1,24.1-30.1,53-27,86.7c3.4,33.8,24.5,65.9,63.3,96.6c7.2,5.3,12.1,12.9,14.8,22.7c2.7,9.8,3.8,19.1,3.5,27.9
|
||||
c0,6.3-1.3,12.4-4,18.5c-2.7,6.1-6,11.5-10.1,16.2c-4.1,4.7-8.9,8.6-14.5,11.7c-5.6,3.1-11.4,5.5-17.3,7
|
||||
c-5.6,1.3-11.5,1.6-17.6,0.9c-6.1-0.6-12-1.9-17.6-3.8C104.1,419.4,101.5,417.9,99.2,415.7z M191.1,442.6
|
||||
c17.3-9.2,28.5-28.4,33.5-57.4c-5,8.4-9.7,14.8-14.1,19c-4.4,4.2-8.6,7.9-12.7,11c9.1-11.6,16.9-23.7,23.4-36.6
|
||||
c6.6-12.8,12.8-24.6,18.8-35.4c5.9-10.8,12-19.8,18.3-27c6.6-7.5,14.4-11.4,23.4-11.7l40.8,38v35.6c-4.1,8.8-8.9,16.4-14.5,23
|
||||
s-12,11.9-19.2,15.9c-8.8,13.8-18.9,24.4-30.5,31.9c-11.3,7.2-23.8,11.8-37.7,13.8c-13.9,2-28.7,1.8-44.3-0.7
|
||||
c-15.9-2.5-32.5-6.6-49.7-12.2C152.2,454.3,173.7,451.9,191.1,442.6z M297.3,269.9c12.8-19.1,25.3-34.8,37.5-47.3
|
||||
c11.9-12.8,24.1-25.9,36.6-39.4c12.5-13.4,25.6-29.2,39.4-47.3c13.7-17.8,28.6-41.7,44.5-71.7l11.7,1.9l0.5,14.1l5.2,0.9
|
||||
l-0.5,11.3L481,103l-6.1,7.5l-0.5,14.1c-11.3,11.3-21.7,25-31.4,41.3c-9.7,16.3-19.1,33.2-28.4,50.9
|
||||
c-9.2,17.7-18.4,35.1-27.4,52.3c-9.1,17.5-18.6,33.1-28.6,46.9L297.3,269.9z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Invocations">
|
||||
<g>
|
||||
<path class="st16" d="M122.9,85.7c-0.3-1.9,0.5-3.8,2.6-5.6c2-1.9,4.9-3.8,8.7-5.6c1.2,4.7,6.6,8,15.9,9.8s20.3,1.9,32.8,0
|
||||
c12.8-1.9,23.4-5.2,31.9-10.1c8.4-4.8,12.3-9.6,11.7-14.3v-0.5c3.4,0.6,6.3,1.6,8.7,3s3.7,3,4,4.9l28.6,140.2h21.6l-30-144.8
|
||||
c0.6-0.3,1.2-0.6,1.9-0.9c0.6-0.3,1.1-0.6,1.4-0.9l0.9-4.2c-0.3-2.2,1.5-4.4,5.4-6.6c3.9-2.2,8.8-3.8,14.8-4.7
|
||||
c5.9-0.6,11.1-0.5,15.5,0.5c4.4,0.9,6.7,2.5,7,4.7l2.3,3.3c0.6,0,1.4,0.2,2.3,0.5c0.9,0.3,1.7,0.6,2.3,0.9l37.5,180.5
|
||||
c-6.3,9.4-18,17.3-35.2,23.9c-17.2,6.9-35.7,11.8-55.5,14.8c-19.8,3-39.1,3.8-57.9,2.6c-18.4-1.2-32.2-5.3-41.3-12.2L122.9,85.7z
|
||||
M151.5,63.9c-8.1-1.7-12.5-4.6-13.1-8.7c-0.6-4.1,2.7-8,9.8-12c7.2-3.9,16.2-6.8,27.2-8.7c10.6-1.6,20-1.5,28.1,0.2
|
||||
c8.1,1.7,12.5,4.6,13.1,8.7c0.6,4.1-2.7,8.1-9.8,12.2c-7.2,4.1-16.3,6.9-27.2,8.4C169,65.7,159.6,65.6,151.5,63.9z M197.9,145.7
|
||||
c-9.1,1.3-17.7,1.7-25.8,1.4c-8.1-0.3-15.8-1.4-23-3.3l25.3,113c6.2,3.1,13.4,5.2,21.6,6.3c8.1,1.1,17,1.3,26.7,0.7L197.9,145.7z
|
||||
M339.4,432.6c-0.6,0-1.3-0.2-1.9-0.5c-0.6-0.3-1.4-0.6-2.3-0.9L311.8,321c-3.1,1.6-6.4,2.8-9.8,3.8c-3.4,0.9-6.7,1.6-9.8,1.9
|
||||
l22,106.9c1.2,6.6-3.8,12.3-15,17.3c-10.9,4.7-23.5,8-37.7,10.1c-14.2,2-27.6,2.6-40.1,1.6c-12.5-0.9-19.2-3.9-20.2-8.9
|
||||
l-32.8-153.8c9.1,6.9,22.8,10.9,41.3,12.2c18.4,1.3,37.6,0.4,57.4-2.6c19.8-3,38.4-7.9,55.5-14.8c17.2-6.6,29.1-14.4,35.6-23.4
|
||||
l0.9,5.6h1.9l28.6,134.5l-3.3,1.4l2.8,10.3c-0.9,0.6-1.8,1.3-2.6,1.9c-0.8,0.6-1.6,1.3-2.6,1.9l0.9,4.2c0.9,5-6,8.4-20.9,10.1
|
||||
c-14.8,1.7-22.7,0.1-23.7-4.9L339.4,432.6z M258.8,434l-21.1-99.4c-9.4,0-18.4-0.7-27-2.1c-8.6-1.4-17-3.7-25.1-6.8l23.9,107.8
|
||||
c8.4,1.9,16.7,2.8,24.8,2.8C242.6,436.3,250.7,435.5,258.8,434z M217.6,470.1c13.4,3.4,27.5,4.2,42.2,2.3
|
||||
c14.7-1.9,30.2-6.9,46.4-15c0.6,2.2,0.8,4.1,0.5,5.6c-0.3,1.6-1.3,3-2.8,4.2c-18.8,13.7-37.3,19.1-55.8,16.2
|
||||
c-18.4-3-28.6-5.6-30.5-7.7V470.1z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Katas" class="st0">
|
||||
<g class="st1">
|
||||
<path class="st17" d="M376,478.5l-14.1-30.9l-6.1,2.3l-72.7-96.1L263,369.3c-7.2,5.3-16.2,7.3-27,6.1c-10.8-1.2-19.5-5-26-11.3
|
||||
l-29.5-28.6l-50.6-1.9l26.3-30.5c4.1-4.7,10.1-7.4,18-8.2c8-0.8,14.1,0.9,18.5,4.9l42.2,37.5l23-18.8L92.9,89.4L82.6,33.6
|
||||
L133.2,59l175.3,221.7l24.4-16.9L308,212.7c-2.5-5.3-2.3-11.6,0.7-19c3-7.3,7.3-12.4,12.9-15.2l36.6-16.9L346,210.8l19.2,36.6
|
||||
c4.4,7.8,5.6,17.1,3.8,27.9s-6.3,18.8-13.1,24.1l-20.2,15l0.5,0.9l71.3,95.6l-3.8,5.2l25.8,22l-2.3,27.2l-24.4,18.3L376,478.5z"
|
||||
/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Clans" class="st0">
|
||||
<g id="Imperial" class="st1">
|
||||
<rect y="18.6" class="st18" width="512" height="493.4"/>
|
||||
<text transform="matrix(1 0 0 1 16 468.6476)" class="st19 st4 st5"></text>
|
||||
</g>
|
||||
<g id="Unicorn">
|
||||
<rect y="18.6" class="st3" width="512" height="493.4"/>
|
||||
<text transform="matrix(1 0 0 1 16 468.6476)" class="st20 st4 st5"></text>
|
||||
</g>
|
||||
<g id="Torttle">
|
||||
<rect y="18.6" class="st3" width="512" height="493.4"/>
|
||||
<text transform="matrix(1 0 0 1 16 468.6476)" class="st1 st4 st5"></text>
|
||||
</g>
|
||||
<g id="Scorpion">
|
||||
<rect y="18.6" class="st3" width="512" height="493.4"/>
|
||||
<text transform="matrix(1 0 0 1 16 468.6476)" class="st21 st4 st5"></text>
|
||||
</g>
|
||||
<g id="Phoenix">
|
||||
<rect y="18.6" class="st3" width="512" height="493.4"/>
|
||||
<text transform="matrix(1 0 0 1 16 468.6476)" class="st22 st4 st5"></text>
|
||||
</g>
|
||||
<g id="Mantis">
|
||||
<rect y="18.6" class="st3" width="512" height="493.4"/>
|
||||
<text transform="matrix(1 0 0 1 16 468.6476)" class="st23 st4 st5"></text>
|
||||
</g>
|
||||
<g id="Lion">
|
||||
<rect y="18.6" class="st3" width="512" height="493.4"/>
|
||||
<text transform="matrix(1 0 0 1 16 468.6476)" class="st24 st4 st5"></text>
|
||||
</g>
|
||||
<g id="Dragon">
|
||||
<rect y="18.6" class="st3" width="512" height="493.4"/>
|
||||
<text transform="matrix(1 0 0 1 16 468.6476)" class="st25 st4 st5"></text>
|
||||
</g>
|
||||
<g id="Crab">
|
||||
<rect y="18.6" class="st3" width="512" height="493.4"/>
|
||||
<text transform="matrix(1 0 0 1 16 468.6476)" class="st26 st4 st5"></text>
|
||||
</g>
|
||||
<g id="Crane">
|
||||
<rect y="18.6" class="st3" width="512" height="493.4"/>
|
||||
<text transform="matrix(1 0 0 1 16 468.6476)" class="st27 st4 st5"></text>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 48 KiB |
541
system/assets/icons/techs/specificity.svg
Normal file
541
system/assets/icons/techs/specificity.svg
Normal file
@@ -0,0 +1,541 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 24.1.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{display:none;}
|
||||
.st1{display:inline;}
|
||||
.st2{fill:#FFFFFF;}
|
||||
.st3{display:inline;fill:none;}
|
||||
.st4{font-family:'L5R-Icons';}
|
||||
.st5{font-size:480px;}
|
||||
.st6{fill:#699678;}
|
||||
.st7{fill:#917896;}
|
||||
.st8{fill:#9B7350;}
|
||||
.st9{fill:#5F919B;}
|
||||
.st10{fill:#4B4641;}
|
||||
.st11{fill:#A75B58;}
|
||||
.st12{fill:#68829B;}
|
||||
.st13{fill:#009933;}
|
||||
.st14{fill:#CC3300;}
|
||||
.st15{fill:#0099FF;}
|
||||
.st16{fill:#FF6600;}
|
||||
.st17{fill:#FF0000;}
|
||||
.st18{fill:none;}
|
||||
.st19{fill:#78FFB4;}
|
||||
.st20{display:inline;fill:#785A87;}
|
||||
.st21{display:inline;fill:#9B463C;}
|
||||
.st22{display:inline;fill:#B9784B;}
|
||||
.st23{display:inline;fill:#2D551E;}
|
||||
.st24{display:inline;fill:#A08C50;}
|
||||
.st25{display:inline;fill:#55826E;}
|
||||
.st26{display:inline;fill:#82828C;}
|
||||
.st27{display:inline;fill:#789191;}
|
||||
</style>
|
||||
<g id="Fond" class="st0">
|
||||
<g transform="translate(0,0)" class="st1">
|
||||
<path class="st2" d="M249.9,18.6c-81.4,0-231.4,155.8-171.7,300.7c8,25.3,27.9,50.3,49.2,77.1c24.5,30.6,51.6,63.2,68.7,96.9h20.6
|
||||
c-18.1-39.8-48.6-75.9-74.6-108.5c-27.4-34.3-48.8-65.3-48.8-88c0-3.6,0.4-7.3,1.1-11.1l-0.1,0c0.3-1.2,0.6-2.5,0.9-3.7
|
||||
c0.9-3.8,2.1-7.6,3.7-11.4c23.1-61.4,94.2-106.3,146.6-135l3.6-2l3.9,1.3c60.9,20.9,131.3,66.8,156,135.8c1.1,3,2.1,6,2.9,9
|
||||
c0.4,1.4,0.8,2.8,1.2,4.3l-0.2,0c1.1,5.1,1.7,10.2,1.7,15.2v0c0,22.3-24.4,53.5-55,87.5c-29.1,32.3-62.3,67.6-80,106.6H300
|
||||
c16.8-32.1,46.2-64,73.3-94.1c23.1-25.7,45.3-50,54.9-74.9C481,200.2,329,18.7,249.9,18.6L249.9,18.6z M250.7,154
|
||||
c-38.7,21.5-85,52.2-113.6,88.2c9.7,83,59,146.2,118.3,146.2c59.1,0,108.2-62.7,118.2-145.3C344.7,200.9,295.6,170.1,250.7,154
|
||||
L250.7,154z M192.5,237c0.8,0,1.6,0,2.4,0c13,0.1,26,2.7,39.1,7.4c-16.8,40.6-59,42-78.1,0C168.1,239.6,180.3,237.2,192.5,237z
|
||||
M317.4,237c13-0.1,26,2.3,39.1,7.4c-19.1,42-61.3,40.6-78.1,0C291.3,239.7,304.4,237.1,317.4,237L317.4,237z M204.6,512l0.1,0.3
|
||||
h86.8l0.1-0.3L204.6,512L204.6,512z"/>
|
||||
</g>
|
||||
<rect y="18.6" class="st3" width="512" height="493.4"/>
|
||||
<text transform="matrix(1 0 0 1 16 468.6476)" class="st1 st4 st5"></text>
|
||||
</g>
|
||||
<g id="Elements" class="st0">
|
||||
<g id="Earth" class="st1">
|
||||
<g>
|
||||
<path class="st6" d="M31,258.6c0-30.9,5.9-60.2,17.8-87.7c11.6-27.2,27.6-51,48-71.5c20.5-20.5,44.3-36.5,71.5-48
|
||||
c27.5-11.9,56.7-17.8,87.7-17.8s60.2,5.9,87.7,17.8c27.2,11.6,51,27.6,71.5,48c20.5,20.5,36.5,44.3,48,71.5
|
||||
c11.9,27.5,17.8,56.7,17.8,87.7s-5.9,60.2-17.8,87.7c-11.6,27.2-27.6,51-48,71.5c-20.5,20.5-44.3,36.5-71.5,48
|
||||
c-27.5,11.9-56.7,17.8-87.7,17.8s-60.2-5.9-87.7-17.8c-27.2-11.6-51-27.6-71.5-48c-20.5-20.5-36.5-44.3-48-71.5
|
||||
C36.9,318.8,31,289.6,31,258.6z M438.3,181.8c-10.3-24.1-24.5-45.1-42.4-63c-18-18-39-32.1-63-42.4C308.8,66,283.2,60.8,256,60.8
|
||||
s-52.8,5.2-76.9,15.5c-24.1,10.3-45.1,24.5-63,42.4c-18,18-32.1,39-42.4,63c-10.3,24.1-15.5,49.7-15.5,76.9
|
||||
c0,5.3,0.2,10.6,0.7,15.9c0.5,5.3,1,10.6,1.6,15.9l4.2-0.5c5.9-4.4,11.4-9.3,16.4-14.8c5-5.5,9.7-11.3,14.1-17.6
|
||||
c5.3,0.9,10.8,0.8,16.4-0.5c5.6-1.2,10.6-4.8,15-10.8l55.8-75.9l16.4,22l75-83.9l35.2,36.6c4.1,4.4,7.4,9.4,10.1,15
|
||||
c2.7,5.6,6,10.8,10.1,15.5c5.3,6.3,10.9,12.4,16.6,18.5c5.8,6.1,12.1,11.6,19,16.6l8.4,6.6l21.1-12.2
|
||||
c7.2,17.5,15.2,34.7,24.1,51.6s18.7,33.6,29.3,50.2c2.2-7.8,3.8-15.7,4.7-23.7s1.4-16.2,1.4-24.6
|
||||
C453.8,231.5,448.7,205.8,438.3,181.8z M162.3,231.9l37-19.2l-15.9-19.2L162.3,231.9z M313.7,234.3l28.6,47.3
|
||||
c5-4.7,9.6-10.5,13.8-17.3c4.2-6.9,8.2-14.5,12-23L288.3,156l-34.7,227.3L313.7,234.3z M405.1,277.4c0.9-2.8,2.3-5.6,4.2-8.4
|
||||
l-20.6-37h-1.9l6.1,75c3.1-2.2,5.6-5.2,7.5-9.1c1.9-3.9,3-7.9,3.3-12C403.7,283,404.1,280.2,405.1,277.4z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Air">
|
||||
<g class="st1">
|
||||
<path class="st7" d="M31,258.6c0-30.9,5.9-60.2,17.8-87.7c11.6-27.2,27.6-50.9,48-71.3c20.5-20.3,44.3-36.4,71.5-48.3
|
||||
c27.5-11.9,56.7-17.8,87.7-17.8s60.2,5.9,87.7,17.8c27.2,11.9,51,28,71.5,48.3c20.5,20.3,36.5,44.1,48,71.3
|
||||
c11.9,27.5,17.8,56.7,17.8,87.7s-5.9,60.2-17.8,87.7c-11.6,27.2-27.6,51-48,71.5c-20.5,20.5-44.3,36.5-71.5,48
|
||||
c-27.5,11.9-56.7,17.8-87.7,17.8s-60.2-5.9-87.7-17.8c-27.2-11.6-51-27.6-71.5-48c-20.5-20.5-36.5-44.3-48-71.5
|
||||
C36.9,318.8,31,289.6,31,258.6z M138.8,314c-11.9-5.6-22.6-13.2-32.1-22.7c-9.5-9.5-17.7-21.2-24.6-34.9
|
||||
c-7.2-13.7-13-29.8-17.3-48.3c-2.2,8.1-3.8,16.4-4.9,24.8c-1.1,8.4-1.6,17-1.6,25.8c0,3.1,0.1,6.2,0.2,9.1c0.2,3,0.4,5.9,0.7,8.7
|
||||
C77.9,293,97,306,116.5,315.4c19.5,9.4,39.6,12.8,60.2,10.3C163,323.2,150.4,319.3,138.8,314z M443.3,194.7
|
||||
c-7-20.2-16.8-38.5-29.3-55.1c-20.9-14.1-43.3-21.9-67-23.4c-23.8-1.6-46,1.4-66.8,8.9c-20.8,7.5-38.5,18.6-53.2,33.3
|
||||
c-14.7,14.7-23.4,31.3-26.3,49.7c-1.6,10.9,3,21.6,13.6,31.9c10.6,10.3,21.4,15.6,32.3,15.9c8.4,0.3,16.5-3,24.1-9.8
|
||||
c7.7-6.9,12-14.4,12.9-22.5c0.6-5.9-0.8-11.7-4.2-17.3c-3.4-5.6-8.9-9.4-16.4-11.3c-4.1-0.9-8.5-0.2-13.4,2.1
|
||||
c-4.8,2.3-7.7,5.7-8.7,10.1c-1.3,4.7-1.1,8.4,0.5,11.3c1.6,2.8,4.2,4.2,8,4.2c3.4,0.3,6.3-0.8,8.7-3.3c2.3-2.5,0.5-5.9-5.4-10.3
|
||||
c5.9-0.3,10.3,1.3,13.1,4.9c2.8,3.6,3.6,9.1,2.3,16.6c-0.6,4.1-3.4,7.2-8.4,9.4c-5,2.2-9.5,3-13.6,2.3
|
||||
c-7.2-1.2-13.8-5.2-19.7-11.7c-5.9-6.6-8.9-13.4-8.9-20.6c0-9.4,3.8-18.8,11.3-28.1s15.9-14.4,25.3-15
|
||||
c12.8-0.9,24.8,1.1,35.9,6.1c11.1,5,18.5,19.8,22.3,44.5c5.9-11.3,14.5-19.2,25.8-23.9s22.7-5.7,34.2-3
|
||||
c11.6,2.7,22,9.3,31.4,19.9c9.1,10.3,14.2,25,15.5,44.1c0.9,12.2-1.7,23.9-8,35.2c-5.9,11.3-13.8,20.7-23.7,28.4
|
||||
c-9.8,7.7-20.7,12.6-32.6,14.8c-11.9,2.5-23.1,0.9-33.8-4.7c2.5,20-0.9,35.9-10.3,47.8c-9.4,11.6-21.6,18.8-36.6,21.8
|
||||
c-15,3-31.3,1.3-48.8-4.9c-17.2-6.2-32.3-17.3-45.5-33.3c-1.3-1.2-3.2-1.8-5.9-1.6c-2.7,0.2-4.6,1-5.9,2.6l-5.6,8.4
|
||||
c-17.8-6.2-35.2-16.4-52.3-30.5c-17-14.1-33.8-30.9-50.4-50.6c3.8,23.8,11.3,45.9,22.5,66.6c11.6,20.6,26.1,38.5,43.6,53.7
|
||||
c17.5,15.2,37.2,27,59.1,35.4c22.2,8.8,45.8,13.1,70.8,13.1c27.2,0,52.8-5.2,76.9-15.5c24.1-10.3,45.1-24.4,63-42.4
|
||||
c18-18,32.1-39,42.4-63c10.3-24.1,15.5-49.7,15.5-76.9C453.8,236.1,450.3,214.8,443.3,194.7z M147.7,93.2
|
||||
c-7.2,4.7-14.1,9.8-20.6,15.5s-12.8,11.7-18.8,18.3c-4.4,35.6-3.6,64.1,2.3,85.3c5.6,21.3,14.9,37.6,27.9,49
|
||||
c13,11.4,28.8,18.8,47.6,22.3c18.4,3.4,38.1,5,59.1,4.7c-26.6-4.1-48.1-11.6-64.7-22.5c-16.3-10.9-28.1-24.8-35.4-41.5
|
||||
c-7.3-16.7-10.5-36.2-9.6-58.4C136.2,143.7,140.2,119.4,147.7,93.2z M309.4,68.1c-10.9-3-22.2-5.1-33.8-6.3
|
||||
C256,69,239.1,77.1,225.1,86.1c-13.8,9.4-24.8,19.8-33,31.4c-8.3,11.6-13.5,24.1-15.7,37.5c-2.5,13.8-2.2,28.4,0.9,44.1
|
||||
c1.6-16.9,5.8-32.2,12.7-45.9c7.2-14.1,17.4-26.1,30.7-36.1c13.3-10,29.9-18.1,49.9-24.4c20-6.6,43.4-10.8,70.3-12.7
|
||||
C330.8,75.1,320.4,71.1,309.4,68.1z M264,317.2c-3.1,2.8-5.2,6.1-6.1,9.8c-0.3,1.9,0.2,3.9,1.6,6.1c1.4,2.2,3,3.6,4.9,4.2
|
||||
c1.2,0.3,2.6,0.2,4-0.5c1.4-0.6,2.4-1.4,3-2.3c0.6-0.9,1-1.9,1.2-2.8c0.2-0.9,0.1-1.7-0.2-2.3c-0.3-0.6-0.7-1.2-1.2-1.6
|
||||
s-1-0.9-1.6-1.2c8.1-1.2,11.6,2.4,10.5,11c-1.1,8.6-6.5,14-16.2,16.2c-8.4,1.6-15-0.5-19.7-6.1s-7.2-12.2-7.5-19.7
|
||||
c0-13.1,5.1-22,15.2-26.5c10.2-4.5,22.7-5.7,37.7-3.5c-13.1-10.9-26.3-14.2-39.4-9.8c-13.4,4.1-23.4,11.4-30,22
|
||||
c-6.6,10.6-8,22-4.2,34.2s15.9,20.9,36.6,26.3c22.8,3.4,36.7-3.8,41.7-21.6c5-17.8-1.3-29.4-18.8-34.7
|
||||
C271,313.5,267.1,314.4,264,317.2z M379,259.4c2-5.5,2.9-10.9,2.6-16.2c-0.3-4.4-1.7-8.6-4.2-12.7c-2.5-4.1-5.6-7.3-9.4-9.8
|
||||
c-2.8-2.2-6.1-3.5-9.8-4s-7.3-0.2-10.8,0.7c-3.1,0.6-6,2-8.7,4c-2.7,2-4.5,4.6-5.4,7.7c-0.6,1.9-0.6,3.9,0,6.1
|
||||
c0.6,2.2,1.6,4.1,2.8,5.6c1.6,1.3,3.5,2.1,5.9,2.6s4.5,0.4,6.3-0.2c1.2-0.3,2.4-1.1,3.5-2.3c1.1-1.2,1.6-2.5,1.6-3.8
|
||||
c0.3-0.9,0.2-1.8-0.5-2.6c-0.6-0.8-1.4-1.5-2.3-2.1c-0.9-0.6-1.8-1.2-2.6-1.6c-0.8-0.5-1.6-0.9-2.6-1.2c0.3-1.2,1.7-2.1,4.2-2.6
|
||||
c2.5-0.5,4.5-0.2,6.1,0.7c3.4,1.6,6.3,4.4,8.7,8.4c2.3,4.1,3,8,2.1,11.7c-1.6,5.3-5.2,9.7-10.8,13.1c-5.6,3.4-11.1,5.2-16.4,5.2
|
||||
c-5.9,0-11.6-1.9-16.9-5.6c-5.3-3.8-9.2-8.9-11.7-15.5c-1.6,5.9-3.3,11.1-5.2,15.5c-1.9,4.4-4.1,7.7-6.6,9.8
|
||||
c9.4,12.2,20.7,18.4,34,18.5c13.3,0.2,25.7-5.2,37.3-16.2C374.1,269.3,377,264.8,379,259.4z M389.1,227.7
|
||||
c4.4,20.3,2.8,37.3-4.7,51.1c-7.5,13.8-22.8,23.4-45.9,29.1c11.9,3.1,23,2.2,33.3-2.8c10.3-5.3,18.4-12.3,24.4-21.1
|
||||
c5.9-8.7,8.7-18.4,8.4-29.1C404,244.6,398.8,235.5,389.1,227.7z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Fire">
|
||||
<g class="st1">
|
||||
<path class="st8" d="M31,258.6c0-30.9,5.9-60.2,17.8-87.7c11.6-27.2,27.6-51,48-71.5c20.5-20.5,44.3-36.5,71.5-48
|
||||
c27.5-11.9,56.7-17.8,87.7-17.8s60.2,5.9,87.7,17.8c27.2,11.6,51,27.6,71.5,48c20.5,20.5,36.5,44.3,48,71.5
|
||||
c11.9,27.5,17.8,56.7,17.8,87.7s-5.9,60.2-17.8,87.7c-11.6,27.2-27.6,51-48,71.5c-20.5,20.5-44.3,36.5-71.5,48
|
||||
c-27.5,11.9-56.7,17.8-87.7,17.8s-60.2-5.9-87.7-17.8c-27.2-11.6-51-27.6-71.5-48c-20.5-20.5-36.5-44.3-48-71.5
|
||||
C36.9,318.8,31,289.6,31,258.6z M370.4,384.7c0.3-3.1,1.4-5.3,3.3-6.6c2.8-2.5,4.7-5.4,5.6-8.7s1.4-7.4,1.4-12.4
|
||||
c2.2,3.1,3.8,6.8,4.9,11c1.1,4.2,0.9,9.5-0.7,15.7c-0.9,2.2-0.6,3.8,0.9,4.7c1.6,0.9,3.3,0,5.2-2.8c6.6-10.3,9.7-20.7,9.4-31.2
|
||||
c-0.3-10.5-3.3-20.9-8.9-31.2c-8.1-16.9-10.2-30.1-6.1-39.6c4.1-9.5,12.8-15.1,26.3-16.6c-13.1,9.1-18.2,18.2-15.2,27.4
|
||||
c3,9.2,12,18.5,27,27.9c4.1-5.9,8.3-11.5,12.7-16.6c4.4-5.2,8.9-9.8,13.6-13.8l1.9-0.9c0.6-5.3,1.2-10.6,1.6-15.9
|
||||
c0.5-5.3,0.7-10.8,0.7-16.4c0-27.2-5.2-52.8-15.5-76.9c-10.3-24.1-24.5-45.1-42.4-63c-18-18-39-32.1-63-42.4
|
||||
C308.8,66,283.2,60.8,256,60.8s-52.8,5.2-76.9,15.5c-24.1,10.3-45.1,24.5-63,42.4c-18,18-32.1,39-42.4,63
|
||||
c-10.3,24.1-15.5,49.7-15.5,76.9c0,21.9,3.4,42.7,10.1,62.6c6.7,19.8,16.2,38,28.4,54.6c1.6-0.3,3.4-0.5,5.4-0.5
|
||||
c2,0,3.4-0.5,4-1.4c0.6-0.9,0.7-1.9,0.2-2.8s-0.5-1.7-0.2-2.3c2.5-4.4,6.3-8,11.5-10.8s10.1-4.4,14.8-4.7
|
||||
c-5.6,5.9-9.4,11.6-11.3,17.1c-1.9,5.5-0.9,10.1,2.8,13.8l10.3,10.8c0.9-6.9,2.3-13.4,4.2-19.7c1.9-6.2,4.1-12.3,6.6-18.3
|
||||
c0.9,5.9,2.4,11.8,4.5,17.6c2,5.8,3.4,11.6,4,17.6c10-1.2,14.9-6.6,14.8-16.2c-0.2-9.5-2.1-17.1-5.9-22.7l-6.6-10.3
|
||||
c-10.3-16.6-19.1-36.4-26.3-59.5c-7.2-23.1,3.9-42,33.3-56.7c-9.7,9.4-14.6,18.7-14.8,27.9c-0.2,9.2,4.5,17.9,13.8,26
|
||||
c2.2-12.8,6.2-20.3,12-22.5c5.8-2.2,8.2-15.3,7.3-39.4c6.2,5.3,9.8,13.7,10.8,25.1c0.9,11.4,4.4,18.4,10.3,20.9
|
||||
c7.2-4.1,8.6-12.9,4.2-26.5c-4.4-13.6-9.8-26.6-16.4-39.1c-15-26.9-17.3-49.7-7-68.4c10.3-19.1,24.4-32.3,42.2-39.6
|
||||
c17.8-7.3,35-7.7,51.6-1.2c16.6,6.3,23.4,21.3,20.6,45c-1.9-19.1-7.7-30-17.3-32.8c-9.7-2.5-18.1,0-25.3,7.5
|
||||
c-7.2,7.5-10.8,18.8-10.8,33.8c0,14.7,8.9,30,26.7,45.9c10.6-2.8,16-8.4,16.2-16.9c0.2-8.4-0.4-15.9-1.6-22.5
|
||||
c2.8,6.6,5.6,12.7,8.4,18.5c2.8,5.8,6.4,10.4,10.8,13.8c3.1,3.1,5.4,7.3,6.8,12.7c1.4,5.3,1.6,12,0.7,20.2l20.2,19.2
|
||||
c4.1-2.8,6.7-6.2,8-10.1c1.2-3.9,0.6-8.4-1.9-13.4l-5.2-10.3c-5.9-11.9-8.1-23-6.6-33.5c1.6-10.5,10.2-15.7,25.8-15.7
|
||||
c-10.9,8.1-16.1,15.6-15.5,22.5c0.6,6.9,3.1,13,7.5,18.3l13.1,15.9c9.1,10.6,15.3,22.7,18.8,36.1c3.4,13.4,0.2,29.1-9.8,46.9
|
||||
c9.1,15.6,13,30.2,11.7,43.8c-1.3,13.6-6.6,26.3-15.9,38.2c-0.6,1.9-1.6,3.5-3,4.9s-2.3,3-2.6,4.9c-0.3,2.2-0.2,4.3,0.2,6.3
|
||||
c0.5,2,1.2,4.1,2.1,6.3c0.3,0.6,0.7,1.4,1.2,2.3s1.2,1.4,2.1,1.4c1.2,0,2.3-0.8,3.3-2.3c0.9-1.6,1.7-3,2.3-4.2
|
||||
C369.1,390.5,370.1,387.9,370.4,384.7z M301,408.6c0.3-7.5,3.8-13.7,10.3-18.8c8.4-6.6,15.7-14.3,21.8-23.2s8.2-17.1,6.3-24.6
|
||||
c-1.3,3.4-3.2,5.6-5.9,6.6c-2.7,0.9-5.6,1.3-8.7,0.9l-10.8-0.9c-1.3,0-2-1.1-2.3-3.3c-0.3-2.2-0.2-3.9,0.5-5.2
|
||||
c10.3-16.9,16.6-31.2,19-42.9s1-20.2-4-25.5c-1.3,5.3-4.1,11.1-8.7,17.3c-4.5,6.3-8.7,9.5-12.4,9.8h-7c-1.9,0-3.7-0.5-5.4-1.6
|
||||
c-1.7-1.1-2.9-2.6-3.5-4.5c-4.4-15.3-10.9-28.5-19.7-39.6c-8.8-11.1-18-21.6-27.7-31.6c10,35.9,9.4,63.8-1.9,83.7
|
||||
c-11.3,19.8-30,24.6-56.3,14.3c10,18.1,16.9,35.6,20.6,52.3c3.8,16.7-0.9,31.6-14.1,44.8c-0.3,0.3-0.6,0.5-0.9,0.7
|
||||
c-0.3,0.2-0.8,0.2-1.4,0.2h-5.2c-0.9,0-1.9,0.2-2.8,0.7s-1.9,1-2.8,1.6c-0.6,0.6-1.2,1.3-1.6,2.1c-0.5,0.8-0.7,1.6-0.7,2.6
|
||||
c-0.3,0.9-0.4,1.9-0.2,2.8c0.2,0.9,0.4,1.7,0.7,2.3c0.6,0.9,1.2,1.7,1.6,2.3c0.5,0.6,1,1.3,1.6,1.9c2.8,2.2,5.9,4.2,9.1,6.1
|
||||
s6.6,3.1,10.1,3.8l8.9-2.3c-2.8-3.8-5.1-7.1-6.8-10.1c-1.7-3-2.6-5.1-2.6-6.3c1.9,0.6,3.9,1.9,6.1,3.8c2.2,1.9,4.5,4.1,7,6.6
|
||||
l7.5-5.2c1.9-4.7,3.1-9.5,3.8-14.5c0.6-5,0-9.7-1.9-14.1l-7.5-17.8c-0.3-1.2-0.5-2.4-0.7-3.5c-0.2-1.1-0.1-2.3,0.2-3.5l13.1,17.8
|
||||
c2.2,3.1,4.4,3.3,6.6,0.5c2.2-2.8,3.9-5.2,5.2-7c1.2-2.5,1.6-5.4,0.9-8.7c-0.6-3.3-1.4-6.3-2.3-9.1c-2.2-5.9-5.2-11.6-8.9-16.9
|
||||
c-3.8-5.3-7.8-10.3-12.2-15c6.2,1.9,11.8,5.3,16.6,10.3c4.8,5,9.8,9.8,14.8,14.5c2.5,2.5,4.9,3.4,7.3,2.6
|
||||
c2.3-0.8,2.7-2.9,1.2-6.3c-4.1-10.6-5.7-22.7-4.9-36.1c0.8-13.4,6-26.3,15.7-38.4c-0.3,7.2,0,16.5,0.9,27.9
|
||||
c0.9,11.4,4.4,19.8,10.3,25.1c4.4,2.2,9.1,1.5,14.1-2.1c5-3.6,8.7-7.7,11.3-12.4c-5.9,17.2-8.2,33.9-6.8,50.2
|
||||
c1.4,16.3-3.5,31.1-14.8,44.5c-5,5.6-4.8,10.7,0.5,15.2c5.3,4.5,10.6,4.1,15.9-1.2c-3.4,5.3-5.2,9.4-5.2,12.2s2.5,4.1,7.5,3.8
|
||||
c2.8-0.9,5.5-2,8.2-3.3c2.7-1.2,5.2-2.7,7.7-4.2C305.5,426.8,300.7,416.1,301,408.6z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Water">
|
||||
<g class="st1">
|
||||
<path class="st9" d="M31,258.6c0-30.9,5.9-60.2,17.8-87.7c11.6-27.2,27.6-51,48-71.5c20.5-20.5,44.3-36.5,71.5-48
|
||||
c27.5-11.9,56.7-17.8,87.7-17.8s60.2,5.9,87.7,17.8c27.2,11.6,51,27.6,71.5,48c20.5,20.5,36.5,44.3,48,71.5
|
||||
c11.9,27.5,17.8,56.7,17.8,87.7s-5.9,60.2-17.8,87.7c-11.6,27.2-27.6,51-48,71.5c-20.5,20.5-44.3,36.5-71.5,48
|
||||
c-27.5,11.9-56.7,17.8-87.7,17.8s-60.2-5.9-87.7-17.8c-27.2-11.6-51-27.6-71.5-48c-20.5-20.5-36.5-44.3-48-71.5
|
||||
C36.9,318.8,31,289.6,31,258.6z M376,327.8c11.9-8,22-17.1,30.5-27.4c8.4-10,14.8-21.2,19.2-33.5c4.4-12.3,8.1-24.8,11.3-37.3
|
||||
c1.6-6.6,2.7-13.1,3.5-19.7c0.8-6.6,1.2-13.1,1.2-19.7c-6.9-19.1-16.4-36.4-28.6-52c-12.5-15.9-26.8-29.6-42.9-41
|
||||
c-16.1-11.4-33.8-20.4-53.2-27c-19.4-6.2-39.7-9.4-60.9-9.4c-27.2,0-52.8,5.2-76.9,15.5c-24.1,10.3-45.1,24.5-63,42.4
|
||||
c-18,18-32.1,39-42.4,63c-10.3,24.1-15.5,49.7-15.5,76.9c0,10,0.7,19.8,2.1,29.3c1.4,9.5,3.5,18.8,6.3,27.9
|
||||
c9.7-44.4,22.7-81.4,38.9-111.1c16.6-29.7,35.9-52.9,58.1-69.6c22.2-16.7,47.2-27.4,75-32.1c27.8-4.4,58-3.8,90.5,1.9l13.1,11.7
|
||||
l-17.8,3.3c-3.1,0.6-6.4,1.3-9.8,1.9c-3.4,0.6-6.4,1.9-8.9,3.8c-1.6,0.9-3,2.2-4.5,3.8c-1.4,1.6-1.8,3.1-1.2,4.7
|
||||
c0.3,0.9,1,1.5,2.1,1.6c1.1,0.2,2.1,0.4,3,0.7c3.1,0.6,6.2,0.5,9.4-0.2c3.1-0.8,6.2-1,9.4-0.7c3.8,0.3,7.7,0.7,11.7,1.2
|
||||
c4.1,0.5,7.8,1.6,11.3,3.5c5.3,2.5,10.6,5.6,15.9,9.4c5.3,3.8,9.2,8.4,11.7,14.1c1.2,3.1,1.5,6.6,0.7,10.3
|
||||
c-0.8,3.8-1.5,7.3-2.1,10.8c-3.8-10.3-8.3-16.6-13.6-19c-5.3-2.3-11.6-4-18.8-4.9c-6.9-0.9-12.4,0.5-16.6,4.5
|
||||
c-4.2,3.9-4.6,9.3-1.2,16.2c0.6,1.6,1.6,3,3,4.5s2.7,2.7,4,4l12.2,10.3c6.9,5.9,11.6,13.7,14.1,23.2c2.5,9.5,0.2,19.9-7,31.2
|
||||
c0-9.1-1.1-16.2-3.3-21.6c-2.2-5.3-5.8-8.3-10.8-8.9l-14.1-3.8c-5.9-1.6-10.2-0.9-12.9,1.9c-2.7,2.8-2.1,7.8,1.6,15l3.8,6.1
|
||||
c3.8,6.3,4.8,14.1,3,23.7c-1.7,9.5-5.9,16.2-12.4,19.9c2.2-14.7,0.9-25-3.8-30.9c-4.7-5.9-11.6-9.2-20.6-9.8
|
||||
c-6.6-2.5-13.8-2.2-21.6,0.9c-7.8,3.1-14.1,7.3-18.8,12.7c-5,5.6-8.6,12.7-10.8,21.1c-2.2,8.4-2,16.3,0.5,23.4
|
||||
c3.1,9.4,9.3,17.2,18.5,23.4c9.2,6.3,18.5,11.1,27.9,14.5c9.7,3.8,20.1,5.9,31.2,6.3c11.1,0.5,21.8-0.5,32.1-3
|
||||
C351.8,341.6,364.1,335.8,376,327.8z M189,408.2l-2.8-2.8c-1.9-1.9-1.5-4.8,1.2-8.7c2.7-3.9,5.4-5.7,8.2-5.4l115.8,8.9
|
||||
c17.8,1.3,34.6-3.9,50.4-15.5c15.8-11.6,29-26.4,39.6-44.5c-11.9,10.6-26.6,19.3-44.1,26c-17.5,6.7-34.8,9.3-52,7.7l-119.5-9.4
|
||||
c-3.8,0.3-6.8,1.6-9.1,3.8c-2.3,2.2-3.7,5.3-4,9.4L157.1,366c-5.9-4.7-10.8-10.5-14.5-17.6s-7.3-14-10.8-20.9
|
||||
c-2.5-5.3-2.1-9.5,1.2-12.7c3.3-3.1,7.4-2.8,12.4,0.9l15,9.4l6.1-7l-27.2-23c-4.7-2.8-9.7-2.4-15,1.2c-5.3,3.6-8.3,7.6-8.9,12
|
||||
c-1.9,10.9-1,22.3,2.6,34c3.6,11.7,9.4,21.3,17.6,28.8l46.9,46.4L189,408.2z M293,177.6c-0.6-6.6,2.2-12.7,8.4-18.3
|
||||
c-19.1-0.6-29.1-4.5-30-11.5s4.7-16.2,16.9-27.4c-17.8-1.2-34.4-0.2-49.7,3.3c-15.3,3.4-29.5,9.1-42.7,17.1s-25.3,18-36.6,30.2
|
||||
c-10.9,11.9-21.1,25.6-30.5,41.3c15.6-6.9,30.6-11.9,45-15c14.7-3.1,28.8-4.1,42.4-3c13.6,1.1,26.5,4.6,38.7,10.5
|
||||
c12.2,5.9,23.7,14.8,34.7,26.7c-3.4-9.7-3.1-17.2,0.9-22.5c4.1-5.3,11.7-8.4,23-9.4C300.5,191.5,293.7,184.1,293,177.6z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Void">
|
||||
<g class="st1">
|
||||
<path class="st10" d="M31,258.6c0-30.9,5.9-60.2,17.8-87.7c11.6-27.2,27.6-51,48-71.5c20.5-20.5,44.3-36.5,71.5-48
|
||||
c27.5-11.9,56.7-17.8,87.7-17.8s60.2,5.9,87.7,17.8c27.2,11.6,51,27.6,71.5,48c20.5,20.5,36.5,44.3,48,71.5
|
||||
c11.9,27.5,17.8,56.7,17.8,87.7s-5.9,60.2-17.8,87.7c-11.6,27.2-27.6,51-48,71.5c-20.5,20.5-44.3,36.5-71.5,48
|
||||
c-27.5,11.9-56.7,17.8-87.7,17.8s-60.2-5.9-87.7-17.8c-27.2-11.6-51-27.6-71.5-48c-20.5-20.5-36.5-44.3-48-71.5
|
||||
C36.9,318.8,31,289.6,31,258.6z M438.3,181.8c-10.3-24.1-24.5-45.1-42.4-63c-18-18-39-32.1-63-42.4C308.8,66,283.2,60.8,256,60.8
|
||||
s-52.8,5.2-76.9,15.5c-24.1,10.3-45.1,24.5-63,42.4c-18,18-32.1,39-42.4,63c-10.3,24.1-15.5,49.7-15.5,76.9
|
||||
c0,21.6,3.3,42.2,9.8,61.9c6.6,19.4,15.7,37.2,27.4,53.4c11.7,16.3,25.5,30.5,41.5,42.7c16.2,12.2,33.9,21.7,53,28.6
|
||||
c-15-6.2-28.8-14.7-41.3-25.3c-12.5-10.3-23.2-22.2-32.1-35.6c-8.9-13.4-15.9-28-20.9-43.6c-5-15.9-7.5-32.7-7.5-50.2
|
||||
c0-23.1,4.4-44.8,13.1-65.2c8.7-20.3,20.7-38,35.9-53.2c15.2-15.2,32.9-27.3,53.2-36.3c20.6-8.7,42.5-13.1,65.6-13.1
|
||||
c23.1,0,44.8,4.4,65.2,13.1c20.3,9.1,38.1,21.2,53.4,36.3c15.3,15.2,27.3,32.9,36.1,53.2c8.7,20.3,13.1,42,13.1,65.2
|
||||
c0,17.5-2.5,34.2-7.5,50.2c-5,15.9-12,30.6-21.1,44.1c-9.1,13.4-20,25.3-32.8,35.6c-12.5,10.6-26.4,19.1-41.7,25.3
|
||||
c19.4-6.9,37.2-16.4,53.4-28.6c16.2-12.2,30.3-26.4,42.2-42.7c11.9-16.2,21.1-34.2,27.7-53.9s9.8-40.3,9.8-61.9
|
||||
C453.8,231.5,448.7,205.8,438.3,181.8z M211.9,344.4c12.2-12.2,26.9-18.3,44.1-18.3c17.2,0,31.9,6.1,44.1,18.3
|
||||
s18.3,26.9,18.3,44.1c0,12.5-3.4,23.8-10.3,34c-6.9,10.2-15.6,17.7-26.3,22.7c22.8-5.9,41.7-18.3,56.7-37S361,367.7,361,343
|
||||
c0-12.8-2.2-25-6.6-36.6c-4.4-11.6-10.5-22-18.3-31.2c-7.8-9.2-17-16.9-27.7-23.2c-10.6-6.2-22-10.5-34.2-12.7
|
||||
c7.2,3.4,13.1,8.7,17.8,15.7s7,14.8,7,23.2c0,12.2-4.2,22.4-12.7,30.7c-8.4,8.3-18.6,12.4-30.5,12.4c-11.9,0-22-4.1-30.5-12.4
|
||||
c-8.4-8.3-12.7-18.5-12.7-30.7c0-8.4,2.3-16.2,6.8-23.2c4.5-7,10.5-12.3,18-15.7c-12.5,2.2-24.1,6.4-34.7,12.7
|
||||
c-10.6,6.3-19.8,14-27.4,23.2c-7.7,9.2-13.8,19.6-18.5,31.2c-4.4,11.6-6.6,23.8-6.6,36.6c0,24.7,7.6,46.4,22.7,65.2
|
||||
c15.2,18.8,34.1,31.1,57,37c-10.9-5-19.8-12.6-26.5-22.7c-6.7-10.2-10.1-21.5-10.1-34C193.7,371.3,199.8,356.6,211.9,344.4z
|
||||
M304.3,382.4c0-13.4-4.7-24.8-14.1-34.2s-20.8-14.1-34.2-14.1c-13.4,0-24.8,4.7-34.2,14.1s-14.1,20.8-14.1,34.2
|
||||
c0,13.4,4.7,24.8,14.1,34.2s20.8,14.1,34.2,14.1c13.4,0,24.8-4.7,34.2-14.1S304.3,395.8,304.3,382.4z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Npcs" class="st0">
|
||||
<g id="Martial" class="st1">
|
||||
<g>
|
||||
<path class="st11" d="M57.3,388.5L31,315.4c8.7-1.9,18-3.4,27.7-4.7c9.7-1.2,20-1.9,30.9-1.9c5.9,10.6,13.3,20.5,22,29.5
|
||||
c8.7,9.1,19.1,17.2,30.9,24.4c-14.7,1.9-29.2,5-43.6,9.4C84.6,376.5,70.7,381.9,57.3,388.5z M50.7,100.7
|
||||
c12.2,9.1,22.7,19.1,31.6,30.2c8.9,11.1,10.5,22.9,4.9,35.4c-8.1,17.5-12.5,35.9-13.1,55.3c-0.6,19.4,3.6,38,12.7,56
|
||||
c9.1,18,23.4,34.6,43.1,49.9c19.7,15.3,45.8,27.7,78.3,37c2.8-6.2,6.1-11.3,9.8-15s7.7-7,11.7-9.8c-28.1-9.7-48.3-23-60.5-39.8
|
||||
s-18.8-33-19.7-48.3c-0.9-15.3,2.7-27.8,10.8-37.5c8.1-9.4,18.3-11.6,30.5-6.6c-2.5-17.5,1.2-28.4,11.3-32.8
|
||||
c10-4.4,19.7-1.4,29.1,8.9c7.8-21.2,5.9-39.9-5.6-56c-11.6-16.1-29.5-20.7-53.9-13.8c-5.9-7.8-13.8-13.9-23.7-18.3
|
||||
c-9.8-4.4-19.9-5-30.2-1.9c-10.3,3.1-20.7,3.7-31.2,1.6c-10.5-2-21.2-6-32.1-12L50.7,100.7z M83,393.6
|
||||
c17.2-6.2,34.5-12.7,51.8-19.5c17.3-6.7,30.1-4,38.2,8.2c5.3,0,10.6,0.4,15.9,1.2c5.3,0.8,10.5,2.7,15.5,5.9
|
||||
c0,5.3,0.7,10.4,2.1,15.2c1.4,4.8,3.5,9.3,6.3,13.4h-74.5v-13.6c-5.9,2.8-11.4,6.7-16.4,11.7c-5,5-9.7,10.9-14.1,17.8L83,393.6z
|
||||
M256,354.7c-9.1,0-16.8,3.1-23.2,9.4c-6.4,6.3-9.6,13.9-9.6,23c0,9.1,3.2,16.8,9.6,23.2c6.4,6.4,14.1,9.6,23.2,9.6
|
||||
c9.1,0,16.7-3.2,23-9.6c6.2-6.4,9.4-14.1,9.4-23.2c0-9.1-3.1-16.7-9.4-23C272.7,357.9,265.1,354.7,256,354.7z M461.3,100.7
|
||||
c-12.2,9.1-22.7,19.1-31.6,30.2c-8.9,11.1-10.5,22.9-4.9,35.4c8.1,17.5,12.5,35.9,13.1,55.3c0.6,19.4-3.6,38-12.7,56
|
||||
c-9.1,18-23.4,34.6-43.1,49.9c-19.7,15.3-45.8,27.7-78.3,37c-2.8-6.2-6.1-11.3-9.8-15s-7.7-7-11.7-9.8
|
||||
c28.1-9.7,48.3-23,60.5-39.8s18.8-33,19.7-48.3c0.9-15.3-2.7-27.8-10.8-37.5c-8.1-9.4-18.3-11.6-30.5-6.6
|
||||
c2.5-17.5-1.3-28.4-11.3-32.8c-10-4.4-19.7-1.4-29.1,8.9c-7.8-21.2-5.9-39.9,5.6-56c11.6-16.1,29.5-20.7,53.9-13.8
|
||||
c5.9-7.8,13.8-13.9,23.7-18.3c9.8-4.4,19.9-5,30.2-1.9c10.3,3.1,20.7,3.7,31.2,1.6c10.5-2,21.2-6,32.1-12L461.3,100.7z
|
||||
M429,393.6c-17.2-6.2-34.5-12.7-51.8-19.5c-17.3-6.7-30.1-4-38.2,8.2c-5.3,0-10.6,0.4-15.9,1.2c-5.3,0.8-10.5,2.7-15.5,5.9
|
||||
c0,5.3-0.7,10.4-2.1,15.2c-1.4,4.8-3.5,9.3-6.3,13.4h74.5v-13.6c5.9,2.8,11.4,6.7,16.4,11.7c5,5,9.7,10.9,14.1,17.8L429,393.6z
|
||||
M454.8,388.5l26.3-73.1c-8.8-1.9-18-3.4-27.7-4.7c-9.7-1.2-20-1.9-30.9-1.9c-5.9,10.6-13.3,20.5-22,29.5
|
||||
c-8.8,9.1-19.1,17.2-30.9,24.4c14.7,1.9,29.2,5,43.6,9.4C427.4,376.5,441.3,381.9,454.8,388.5z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Social">
|
||||
<g class="st1">
|
||||
<path class="st12" d="M249.4,382.4L31,265.2c7.8-6.9,15.9-13.3,24.1-19.2c8.3-5.9,17.1-11.3,26.5-15.9c2.8-6.6,5.4-13.2,7.7-19.9
|
||||
c2.3-6.7,4.1-13.5,5.4-20.4l-8.4-8.4c9.4-4.1,18.9-7.1,28.6-9.1c9.7-2,19.5-3.2,29.5-3.5c5.3-4.1,10.4-8.8,15.2-14.3
|
||||
c4.8-5.5,9.4-11.5,13.8-18l-6.6-11.3c9.1-0.3,18.3,0.5,27.7,2.6c9.4,2,19.2,5.2,29.5,9.6c6.9-1.9,13.4-4.2,19.7-7
|
||||
c6.2-2.8,12.2-6.6,17.8-11.3v-12.7c7.8,3.4,15.6,7.6,23.4,12.4c7.8,4.8,15.5,11.5,23,19.9c6.9,2.2,13.8,3.1,20.9,2.8
|
||||
c7-0.3,14-1.6,20.9-3.8l3.3-12.7c6.6,7.2,12.7,14.7,18.5,22.5c5.8,7.8,10.5,16.6,14.3,26.3c5.3,5,11.3,9.1,17.8,12.2
|
||||
c6.6,3.1,13.9,4.5,22,4.2l7-8.4c4.1,8.1,7.6,17.3,10.5,27.7c3,10.3,5.1,22,6.3,35.2c4.4,5.3,9.1,10.2,14.3,14.8
|
||||
c5.2,4.5,10.9,8.4,17.1,11.5L273.3,381.5l14.5,7.5c-3.4,15.3-12.4,22.7-27,22.3s-23.5-7.6-27-21.3L249.4,382.4z M186.2,304.1
|
||||
l-4.7,15.5l-17.8,9.4l80.6,42.2L186.2,304.1z M218.5,279.7l-9.4,11.3l-20.2,3.8l60,69.8L218.5,279.7z M256.5,361.3v-90.9l-13.1,7
|
||||
l-20.6-6.6L256.5,361.3z M264.9,363.6l31.4-84.8l-15,0.5l-16.9-14.1L264.9,363.6z M328.7,299.4l-7.5-1.9l-17.3-22l-31.4,89.1
|
||||
L328.7,299.4z M353,332.7l-8-7.5l-5.6-26.3l-59.5,71.7L353,332.7z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="list_-_copie">
|
||||
<g class="st1">
|
||||
<path d="M31,258.6c0-30.9,5.9-60.2,17.8-87.7c11.6-27.2,27.6-51,48-71.5c20.5-20.5,44.3-36.5,71.5-48
|
||||
c27.5-11.9,56.7-17.8,87.7-17.8s60.2,5.9,87.7,17.8c27.2,11.6,51,27.6,71.5,48c20.5,20.5,36.5,44.3,48,71.5
|
||||
c11.9,27.5,17.8,56.7,17.8,87.7s-5.9,60.2-17.8,87.7c-11.6,27.2-27.6,51-48,71.5c-20.5,20.5-44.3,36.5-71.5,48
|
||||
c-27.5,11.9-56.7,17.8-87.7,17.8s-60.2-5.9-87.7-17.8c-27.2-11.6-51-27.6-71.5-48c-20.5-20.5-36.5-44.3-48-71.5
|
||||
C36.9,318.8,31,289.6,31,258.6z M467.4,258.6c0-29.1-5.5-56.6-16.4-82.5c-11.3-25.6-26.4-48-45.5-67
|
||||
c-19.1-19.1-41.4-34.2-67-45.5c-25.9-10.9-53.4-16.4-82.5-16.4s-56.6,5.5-82.5,16.4c-25.6,11.3-48,26.4-67,45.5
|
||||
c-19.1,19.1-34.2,41.4-45.5,67c-10.9,25.9-16.4,53.4-16.4,82.5s5.5,56.6,16.4,82.5c11.3,25.6,26.4,48,45.5,67
|
||||
c19.1,19.1,41.4,34.2,67,45.5c25.9,10.9,53.4,16.4,82.5,16.4s56.6-5.5,82.5-16.4c25.6-11.3,48-26.4,67-45.5
|
||||
c19.1-19.1,34.2-41.4,45.5-67C461.9,315.2,467.4,287.7,467.4,258.6z M75.1,182.2c10.3-24.1,24.3-45,42-62.8
|
||||
c17.7-17.8,38.5-31.9,62.6-42.2c23.7-10.3,49.2-15.5,76.4-15.5s52.7,5.2,76.4,15.5c24.1,10.3,45,24.4,62.8,42.2
|
||||
s31.9,38.8,42.2,62.8c10.3,23.8,15.5,49.2,15.5,76.4s-5.2,52.7-15.5,76.4c-10.3,24.1-24.4,45-42.2,62.8s-38.8,31.9-62.8,42.2
|
||||
c-23.8,10.3-49.2,15.5-76.4,15.5s-52.7-5.2-76.4-15.5c-24.1-10.3-44.9-24.4-62.6-42.2c-17.7-17.8-31.6-38.7-42-62.8
|
||||
c-10.3-23.7-15.5-49.2-15.5-76.4S64.8,206,75.1,182.2z M190.6,305.1c13.6-5.6,24.8-16.2,33.5-31.9c-0.3-0.3-0.5-0.6-0.5-0.9
|
||||
c0-0.3-0.2-0.6-0.5-0.9c-11.9-3.8-23.4-5.3-34.5-4.7c-11.1,0.6-22,3-32.6,7c-2.2,4.1-5.5,7.3-9.8,9.6c-4.4,2.3-9.1,3.5-14.1,3.5
|
||||
c-7.8,0-14.5-2.7-19.9-8.2c-5.5-5.5-8.2-12.1-8.2-19.9c0-7.8,2.7-14.5,8.2-19.9c5.5-5.5,12.1-8.2,19.9-8.2c5,0,9.7,1.2,14.1,3.5
|
||||
c4.4,2.3,7.7,5.6,9.8,9.6c10.6,4.1,21.5,6.4,32.6,7c11.1,0.6,22.6-0.9,34.5-4.7c0.3-0.3,0.5-0.6,0.5-0.9c0-0.3,0.2-0.6,0.5-0.9
|
||||
c-11.3-20-26.3-33-45.2-39.1c-18.9-6.1-37.3-25.4-55.1-57.9c-12.8,15-22.8,32-30,51.1C86.6,217.2,83,237.4,83,258.6
|
||||
c0,21.3,3.6,41.4,10.8,60.5c7.2,19.1,17.2,36.1,30,51.1c4.1-7.5,8.1-14.1,12.2-19.7c4.1-5.6,8.3-10.5,12.7-14.5
|
||||
C163,321,177,310.7,190.6,305.1z M248,191.4c-0.6-11.1-3-21.8-7-32.1c-4.1-2.5-7.3-5.9-9.6-10.3c-2.3-4.4-3.5-9.1-3.5-14.1
|
||||
c0-7.8,2.7-14.5,8.2-19.9c5.5-5.5,12.1-8.2,19.9-8.2c7.8,0,14.5,2.7,19.9,8.2c5.5,5.5,8.2,12.1,8.2,19.9c0,5-1.2,9.7-3.5,14.1
|
||||
c-2.3,4.4-5.6,7.8-9.6,10.3c-4.1,10.3-6.4,21-7,32.1c-0.6,11.1,0.9,22.6,4.7,34.5c0.3,0.3,0.6,0.5,0.9,0.5c0.3,0,0.6,0.2,0.9,0.5
|
||||
c20-11.3,33-26.3,39.1-45.2c6.1-18.9,25.4-37.3,57.9-55.1c-15-12.8-32-22.8-51.1-30c-19.1-7.2-39.2-10.8-60.5-10.8
|
||||
c-21.3,0-41.4,3.6-60.5,10.8c-19.1,7.2-36.1,17.2-51.1,30c7.5,4.1,14.1,8.1,19.7,12.2c5.6,4.1,10.5,8.3,14.5,12.7
|
||||
c15,14.4,25.3,28.4,30.9,42s16.2,24.8,31.9,33.5c0.3-0.3,0.6-0.5,0.9-0.5c0.3,0,0.6-0.2,0.9-0.5C247.1,214,248.7,202.5,248,191.4
|
||||
z M347.9,378.6c-5.6-4.1-10.5-8.3-14.5-12.7c-15-14.4-25.3-28.4-30.9-42s-16.3-24.8-31.9-33.5c-0.3,0.3-0.6,0.5-0.9,0.5
|
||||
c-0.3,0-0.6,0.2-0.9,0.5c-3.8,11.9-5.3,23.4-4.7,34.5c0.6,11.1,3,22,7,32.6c4.1,2.2,7.3,5.5,9.6,9.8c2.3,4.4,3.5,9.1,3.5,14.1
|
||||
c0,7.8-2.7,14.5-8.2,19.9c-5.5,5.5-12.1,8.2-19.9,8.2c-7.8,0-14.5-2.7-19.9-8.2c-5.5-5.5-8.2-12.1-8.2-19.9c0-5,1.2-9.7,3.5-14.1
|
||||
c2.3-4.4,5.5-7.7,9.6-9.8c4.1-10.6,6.4-21.5,7-32.6c0.6-11.1-0.9-22.6-4.7-34.5c-0.3-0.3-0.6-0.5-0.9-0.5c-0.3,0-0.6-0.2-0.9-0.5
|
||||
c-20,11.3-33,26.3-39.1,45.2c-6.1,18.9-25.4,37.3-57.9,55.1c15,12.8,32,22.8,51.1,30c19.1,7.2,39.2,10.8,60.5,10.8
|
||||
c21.2,0,41.4-3.6,60.5-10.8c19.1-7.2,36.1-17.2,51.1-30C360.1,386.8,353.5,382.7,347.9,378.6z M418.2,198.2
|
||||
c-7.2-19.1-17.2-36.1-30-51.1c-4.1,7.5-8.1,14.1-12.2,19.7c-4.1,5.6-8.3,10.5-12.7,14.5c-14.4,15-28.4,25.3-42,30.9
|
||||
s-24.8,16.3-33.5,31.9c0.3,0.3,0.5,0.6,0.5,0.9c0,0.3,0.2,0.6,0.5,0.9c11.9,3.8,23.4,5.3,34.5,4.7c11.1-0.6,21.8-3,32.1-7
|
||||
c2.5-4.1,5.9-7.3,10.3-9.6c4.4-2.3,9.1-3.5,14.1-3.5c7.8,0,14.5,2.7,19.9,8.2c5.5,5.5,8.2,12.1,8.2,19.9c0,7.8-2.7,14.5-8.2,19.9
|
||||
c-5.5,5.5-12.1,8.2-19.9,8.2c-5,0-9.7-1.2-14.1-3.5c-4.4-2.3-7.8-5.5-10.3-9.6c-10.3-4.1-21-6.4-32.1-7
|
||||
c-11.1-0.6-22.6,0.9-34.5,4.7c-0.3,0.3-0.5,0.6-0.5,0.9c0,0.3-0.2,0.6-0.5,0.9c11.3,20,26.3,33,45.2,39.1
|
||||
c18.9,6.1,37.3,25.4,55.1,57.9c12.8-15,22.8-32,30-51.1c7.2-19.1,10.8-39.2,10.8-60.5C429,237.4,425.4,217.2,418.2,198.2z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Techs">
|
||||
<g id="Kihos" class="st0">
|
||||
<g class="st1">
|
||||
<path class="st13" d="M103.9,383.6c-8-5.8-11-15.5-9.1-29.3c16.9-1.6,33.5-3.4,49.9-5.6c16.4-2.2,32.4-2.8,48-1.9
|
||||
c-0.6-20.3,5.2-35.9,17.6-46.6c12.3-10.8,25.7-17.6,40.1-20.4c13.4-2.8,22.7-8.4,27.9-16.9s5.4-16.7,0.7-24.8
|
||||
c-2.2-4.4-4.9-8.5-8.2-12.4c-3.3-3.9-6.8-7.4-10.5-10.5c-1.9-1.9-4-3.2-6.3-4c-2.3-0.8-4.5-1.9-6.3-3.5c-1.9-1.9-3.4-4-4.7-6.3
|
||||
c-1.3-2.3-3-4.1-5.2-5.4c-1.9-1.2-4.1-2-6.8-2.3c-2.7-0.3-5.2-0.5-7.7-0.5c-2.8,0.3-5.5,1.1-8,2.3c-2.5,1.3-5,2.7-7.5,4.2
|
||||
c-1.9,1.3-3.7,2.9-5.4,4.9c-1.7,2-3.4,4-4.9,5.9c-1.6,1.3-3.3,2.4-5.2,3.5c-1.9,1.1-3,2.7-3.3,4.9c-0.3,1.3-0.1,2.4,0.7,3.5
|
||||
c0.8,1.1,1.5,2.3,2.1,3.5c5.3-0.6,10.9-1,16.9-1.2c5.9-0.2,12.2-0.1,18.8,0.2c5.3,0.3,10.3,1.6,15,4s5.2,4.6,1.4,6.8
|
||||
c-2.5,1.3-3.9,2.8-4.2,4.7c-0.3,1.9,1.6,2.7,5.6,2.3h9.4c3.8-0.3,6.2,0.9,7.5,3.5c1.2,2.7,0,4.5-3.8,5.4
|
||||
c-8.1,1.6-16.2,2.7-24.1,3.5c-8,0.8-15.9,1-23.7,0.7l0.9,2.3c-3.1,2.5-6.4,4.4-9.8,5.6c-3.4,1.3-7,1.9-10.8,1.9l-47.8-1.4
|
||||
c-2.5-0.3-4.8-0.9-7-1.6c-2.2-0.8-4.2-1.8-6.1-3h-9.4l-2.8-3.3c-9.4,1.6-17.7,1.7-25.1,0.5c-7.3-1.2-9.1-3.4-5.4-6.6l3.8-3.3
|
||||
l-3.3-3.8l-20.6-2.3c-7.5-0.6-10.5-3-9.1-7c1.4-4.1,5.9-5.9,13.4-5.6l37,2.8c3.4,0.3,6-0.9,7.7-3.8c1.7-2.8,4.8-3.8,9.1-2.8
|
||||
c5.6,0.9,11.2,1.6,16.6,1.9c5.5,0.3,10.9,0.2,16.2-0.5c2.5-3.4,5.3-6.6,8.4-9.6c3.1-3,6.4-5.7,9.8-8.2c1.2-0.9,2.7-1.8,4.5-2.6
|
||||
c1.7-0.8,3.4-1.6,4.9-2.6c1.9-0.6,3.8-1.2,5.9-1.9c2-0.6,3.8-1.6,5.4-2.8c1.6-1.6,2.7-3.5,3.3-5.9c0.6-2.3,1.7-4.5,3.3-6.3
|
||||
c1.2-1.2,2.6-2.6,4-4s3-2.4,4.9-3c1.6-0.3,3.2-0.2,4.9,0.5c1.7,0.6,3.4,1.1,4.9,1.4c1.2,0.3,2.5,0.5,3.8,0.7
|
||||
c1.2,0.2,2.5,0.4,3.8,0.7c0.9,0.3,1.9,0.8,3,1.4c1.1,0.6,2.3,1.3,3.5,1.9c0.9,0.3,1.8,0.5,2.6,0.7c0.8,0.2,1.6,0.4,2.6,0.7
|
||||
c0.3,0,0.6,0.2,0.9,0.5l-18.3-15.9c-0.6-0.6-1.6-1.2-2.8-1.6c-1.3-0.5-2.5-0.9-3.8-1.2c-1.9,0-3.8,0.4-5.9,1.2
|
||||
c-2,0.8-4.1,1.2-6.3,1.2c-1.6,0.3-3.3,0.4-5.2,0.2c-1.9-0.2-3.6-0.4-5.2-0.7c-1.9,0-3.6-0.2-5.2-0.5c-1.6-0.3-3.1-0.8-4.7-1.4
|
||||
l-6.1-1.9l9.8-1.9c1.6-0.3,3.3-0.6,5.2-0.9c1.9-0.3,3.1-1.1,3.8-2.3c0.6-0.6,0.9-1.6,0.7-2.8c-0.2-1.2-0.5-2.2-1.2-2.8
|
||||
c-1.3-0.9-2.7-1.2-4.5-0.9c-1.7,0.3-3.2,0.6-4.5,0.9c-1.3,0-2.3,0.3-3,0.9c-0.8,0.6-1.6,1.1-2.6,1.4c-1.9,0.6-3.7,0.9-5.4,0.9
|
||||
c-1.7,0-3.5,0.2-5.4,0.5c-2.5,0.3-4.9,0.8-7.3,1.4c-2.3,0.6-4.8,1.3-7.3,1.9c-2.5,0.3-5.1,0.5-7.7,0.7c-2.7,0.2-5.2,0.2-7.7,0.2
|
||||
c-1.9,0-3.9,0-6.1,0c-2.2,0-4.4-0.2-6.6-0.5c-1.9-0.3-3.7-0.6-5.4-0.9c-1.7-0.3-3.5-0.8-5.4-1.4c-1.6-0.9-3-2-4.5-3.3
|
||||
c-1.4-1.2-3-2.2-4.9-2.8c-1.3-0.6-2.7-1.1-4.2-1.4c-1.6-0.3-3-0.5-4.2-0.5c-3.1-0.6-6.3-0.9-9.4-0.7c-3.1,0.2-6.1,0.1-8.9-0.2
|
||||
c-2.2,0-4.3,0.1-6.3,0.2c-2,0.2-4.1-0.2-6.3-1.2c-0.3,0-0.7-0.2-1.2-0.5c-0.5-0.3-0.7-0.6-0.7-0.9c-0.3-0.9,0-1.7,0.9-2.3
|
||||
c0.9-0.6,1.7-1.2,2.3-1.9c1.6-1.2,3.3-2.1,5.2-2.6s3.8-1,5.6-1.6c1.2-0.3,2.7-0.5,4.2-0.5c1.6,0,3-0.3,4.2-0.9
|
||||
c1.2-0.3,2.4-0.9,3.5-1.6c1.1-0.8,1.6-1.8,1.6-3c0-0.9-0.5-1.6-1.4-2.1s-1.7-0.9-2.3-1.2c-1.9-0.6-3.7-0.9-5.4-0.7
|
||||
c-1.7,0.2-3.5,0.2-5.4,0.2c-5.6-0.3-11.3-0.4-16.9-0.2c-5.6,0.2-11.1,0.2-16.4,0.2c-1.3,0-2.5,0.2-3.8,0.5
|
||||
c-1.3,0.3-2.5,0.3-3.8,0c-1.3-0.3-2.5-0.8-3.8-1.4c-1.3-0.6-2-1.6-2.3-2.8c-0.6-0.9-0.9-1.9-0.7-3c0.2-1.1,0.4-2.1,0.7-3
|
||||
c0.3-0.9,0.9-1.7,1.6-2.3c0.8-0.6,1.2-1.2,1.2-1.9c-0.3-1.2-1.3-2-2.8-2.3c-1.6-0.3-2.7-1.1-3.3-2.3c0-0.9,0.1-1.9,0.2-2.8
|
||||
c0.2-0.9,0.5-1.7,1.2-2.3c0.9-1.2,2.3-2,4.2-2.3c1.9-0.3,3.6-0.6,5.2-0.9c7.2-1.2,14.5-1.7,22-1.4c7.5,0.3,14.8,0.2,22-0.5h2.3
|
||||
c2.2-3.4,6.6-6.3,13.1-8.7s12.7-3.8,18.3-4.5c8.4-1.2,17-1.1,25.8,0.5c8.7,1.6,17.5,1.6,26.3,0c3.8-0.3,7.3-1.3,10.8-3
|
||||
c3.4-1.7,7-2.9,10.8-3.5c3.4-0.9,7-1.8,10.8-2.6c3.8-0.8,7.5-1,11.3-0.7c3.4,0,6.8,0.7,10.1,2.1s6.5,2.3,9.6,2.6
|
||||
c3.4,0.3,6.7,0.2,9.8-0.5c3.1-0.6,6.2-0.9,9.4-0.9c5.6,0.3,11.2,0.5,16.6,0.5c5.5,0,10.5,1.1,15.2,3.3c1.9,0.6,3.8,1.6,5.9,3
|
||||
c2,1.4,2.9,3,2.6,4.9c0,0.9-0.7,1.6-2.1,2.1s-2.7,0.9-4,1.2c-3.1,1.3-6.3,2.1-9.6,2.6s-6.6,1-10.1,1.6c-0.6,0.3-1.3,0.5-1.9,0.5
|
||||
c-0.6,0-1.1,0.3-1.4,0.9c-0.6,0.3-0.9,0.9-0.9,1.6c0,0.8-0.2,1.3-0.5,1.6c-0.9,0.6-1.9,0.9-2.8,0.7c-0.9-0.2-1.9,0.1-2.8,0.7
|
||||
c-0.6,0.3-1.3,0.7-1.9,1.2c-0.6,0.5-0.9,1-0.9,1.6c0,1.3,0.8,2.2,2.3,2.8c1.6,0.6,2.8,1.3,3.8,1.9c0.6,0.6,1.5,1.3,2.6,1.9
|
||||
c1.1,0.6,1.6,1.4,1.6,2.3c0.3,0.6,0.2,1.4-0.2,2.3s-1,1.7-1.6,2.3c-0.9,0.9-2,1.7-3.3,2.3c-1.3,0.6-2.5,1.3-3.8,1.9
|
||||
c-1.6,0.9-3.2,1.8-4.9,2.6c-1.7,0.8-3.5,1.3-5.4,1.6c-1.9,0.6-3.9,0.7-6.1,0.2c-2.2-0.5-4.1-0.2-5.6,0.7
|
||||
c-0.6,0.3-1.3,0.7-1.9,1.2c-0.6,0.5-0.9,1-0.9,1.6c0,0.6,0.3,1.1,0.9,1.4c0.6,0.3,1.2,0.6,1.9,0.9c0.9,0.3,2,0.3,3.3,0
|
||||
c1.2-0.3,2.5-0.3,3.8,0c1.9,0,3.8-0.1,5.6-0.2c1.9-0.2,3.3,0.4,4.2,1.6c0.3,0.3,0.5,0.8,0.5,1.4c0,0.6-0.2,1.1-0.5,1.4
|
||||
c-0.3,0.3-0.9,0.5-1.6,0.5c-0.8,0-1.5,0.2-2.1,0.5c-1.6,0-3.2,0-4.9,0c-1.7,0-3.4,0.2-4.9,0.5c-0.9,0.3-1.9,0.7-2.8,1.2
|
||||
s-1.6,1.2-1.9,2.1c-0.3,0.6-0.2,1.4,0.2,2.3s0.9,1.7,1.2,2.3c0.9,2.2,2.3,4.1,4,5.9c1.7,1.7,3.5,3.4,5.4,4.9
|
||||
c2.2,1.9,4.7,3.3,7.5,4.2s5.3,2.3,7.5,4.2c1.9,1.3,3.7,2.8,5.4,4.7c1.7,1.9,3.4,3.8,4.9,5.6c2.5,2.8,4.8,5.7,6.8,8.7
|
||||
c2,3,4.1,6,6.3,9.1c1.9,2.5,4.1,5,6.6,7.5c2.5,2.5,4.7,5.3,6.6,8.4c0.6,1.6,1.2,3,1.9,4.5c0.6,1.4,1.2,3,1.9,4.9
|
||||
c0-11.3,1.6-21.4,4.9-30.5c3.3-9.1,11.5-15,24.6-17.8c-1.3-0.9-2.7-1.7-4.5-2.3c-1.7-0.6-3.5-1.1-5.4-1.4c-2.2-0.6-4.5-0.7-7-0.2
|
||||
c-2.5,0.5-5,0.7-7.5,0.7c-2.8-0.3-5.7-0.4-8.7-0.2c-3,0.2-5.7-0.2-8.2-1.2c-2.5-0.6-5.1-1.5-7.7-2.6c-2.7-1.1-4.6-2.7-5.9-4.9
|
||||
c-0.9-1.9-1.3-4-0.9-6.3c0.3-2.3,1.1-4.5,2.3-6.3c1.6-2.2,3.8-3.8,6.6-4.7s5.6-1.7,8.4-2.3c3.4-0.9,6.9-1.5,10.3-1.6
|
||||
c3.4-0.2,7-0.4,10.8-0.7c2.8-0.3,5.6-0.7,8.4-1.2s5.5-1,8-1.6c2.8-0.6,5.4-1.4,7.7-2.3s4.8-1.9,7.3-2.8c3.4-0.9,6.8-1.7,10.1-2.3
|
||||
c3.3-0.6,6.6-1.2,10.1-1.9c3.8-0.3,7.7-0.4,11.7-0.2c4.1,0.2,8,0.2,11.7,0.2c1.9,0,3.7,0.2,5.4,0.5c1.7,0.3,3.4,0.5,4.9,0.5
|
||||
l18.8-1.4c1.9,0,3.8,0.5,5.9,1.4c2,0.9,3.4,2.2,4,3.8c0.3,0.6,0.3,1.4,0,2.3c-0.3,0.9-0.8,1.7-1.4,2.3c-0.3,0.6-0.8,1.2-1.4,1.6
|
||||
c-0.6,0.5-1.4,0.7-2.3,0.7c-0.9,0.3-1.8,0.2-2.6-0.5c-0.8-0.6-1.8-0.9-3-0.9h-9.4c-1.6,0-3,0.2-4.5,0.5c-1.4,0.3-2.9,0.8-4.5,1.4
|
||||
c-1.3,0.6-2.8,1.6-4.7,2.8c-1.9,1.3-2.7,2.7-2.3,4.2c0.3,1.9,1.5,3.1,3.5,3.8c2,0.6,4,0.9,5.9,0.9l49.2-0.9
|
||||
c1.9-0.3,3.8-0.4,5.9-0.2c2,0.2,4,0.5,5.9,1.2c0.9,0.6,1.9,1.2,2.8,1.6s1.6,1.2,1.9,2.1c0.3,0.9,0.3,1.9,0,2.8
|
||||
c-0.3,0.9-0.8,1.7-1.4,2.3c-1.6,1.3-3.5,1.3-5.9,0c-2.3-1.2-4.5-1.6-6.3-0.9c-0.6,0.3-1.2,0.8-1.6,1.4c-0.5,0.6-1,1.1-1.6,1.4
|
||||
c-1.9,0.3-3.8,0.2-5.6-0.5c-1.9-0.6-3.8-0.8-5.6-0.5c-0.3,0.3-0.8,0.5-1.4,0.7c-0.6,0.2-0.9,0.4-0.9,0.7c0,0.9,0.5,1.5,1.4,1.6
|
||||
c0.9,0.2,1.9,0.4,2.8,0.7c0.6,0,1.3-0.1,2.1-0.2c0.8-0.2,1.6-0.2,2.6-0.2c1.2,0.6,2.4,1.4,3.5,2.3c1.1,0.9,2.1,1.9,3,2.8
|
||||
c0.9,1.6,1.6,3.5,1.9,5.9c0.3,2.3,1.2,4.1,2.8,5.4c0.9,0.6,2,1,3.3,1.2c1.2,0.2,2.3,0.1,3.3-0.2c1.6,0,3-0.5,4.2-1.4
|
||||
c1.2-0.9,2.5-1.2,3.8-0.9c2.5,0,5.2,1,8,3c2.8,2,4.2,4.5,4.2,7.3c0,1.9-1.3,3.2-4,4c-2.7,0.8-5.1,1-7.3,0.7
|
||||
c-6.6,0.3-12.3,1.3-17.1,3c-4.8,1.7-8.8,4.5-12,8.2c0,0.3,0.1,0.6,0.2,0.9c0.2,0.3,0.4,0.5,0.7,0.5c0.3,0.3,0.7,0.4,1.2,0.2
|
||||
c0.5-0.2,0.9-0.2,1.2-0.2c0.9-0.3,1.7-0.5,2.3-0.5c0.6,0,1.4,0,2.3,0s1.9,0.1,2.8,0.2c0.9,0.2,1.7,0.5,2.3,1.2
|
||||
c0.3,0.6,0.4,1.4,0.2,2.3c-0.2,0.9-0.4,1.7-0.7,2.3c-0.6,0.9-1.6,1.6-2.8,1.9c-1.3,0.3-2.3,0.6-3.3,0.9c-2.2,0.6-4.5,1.3-7,1.9
|
||||
c-2.5,0.6-4.8,1.1-7,1.4c-2.2,0.3-4.4,0.5-6.6,0.7c-2.2,0.2-4.4,0.4-6.6,0.7c-1.3,0-2.5,0.1-3.8,0.2c-1.3,0.2-2.7,0.2-4.2,0.2
|
||||
c-4.1,0-8.2-0.4-12.4-1.2c-4.2-0.8-8.4-1.3-12.4-1.6c-6.6-0.6-13.2-0.9-19.9-0.7c-6.7,0.2-13.4-0.4-19.9-1.6
|
||||
c-1.6-0.3-3.3-0.6-5.2-0.9c-1.9-0.3-3.6-0.9-5.2-1.9c-0.3-0.3-0.6-0.7-0.9-1.2c-0.3-0.5-0.3-0.9,0-1.2c0.6-1.2,1.9-1.6,3.8-0.9
|
||||
c1.9,0.6,3.4,0.6,4.7,0c0.3-0.3,0.6-0.6,0.9-0.9c0.3-0.3,0.5-0.6,0.5-0.9c-0.3-1.2-1.3-1.9-3-1.9c-1.7,0-3.2-0.2-4.5-0.5
|
||||
c-1.6-0.3-3-0.4-4.5-0.2c-1.4,0.2-2.7-0.1-4-0.7c-0.9-0.6-1.9-1.3-2.8-2.1c-0.9-0.8-1.3-1.6-0.9-2.6c0-0.6,0.5-1.2,1.4-1.6
|
||||
s1.7-0.9,2.3-1.2c1.2-0.9,2.7-1.6,4.5-1.9c1.7-0.3,2.9-1.2,3.5-2.8c-9.4-0.6-16.5,2.3-21.3,8.7c-4.8,6.4-6,15.4-3.5,27
|
||||
c4.4,20,0.9,36.9-10.3,50.6c-11.3,13.8-22.8,21.6-34.7,23.4c-24.7,4.1-38.8,11.3-42.2,21.6c-3.4,10.3,4.2,25.8,23,46.4l0.9-0.5
|
||||
c-4.1-6.6-6.3-12.2-6.6-16.9c-0.3-4.7,1.2-7.2,4.7-7.5c17.2-0.9,34.9-1.2,53.2-0.9c18.3,0.3,37.3,1.7,57,4.2
|
||||
c1.2,14.1-1.7,24.3-8.9,30.7c-7.2,6.4-17.7,9.8-31.4,10.1c1.2,15.3-6.6,26.3-23.7,32.8c-17,6.6-40.7,10.5-71,11.7
|
||||
c-30.3,1.3-54.4-3-72.2-12.7c-17.8-9.7-21.1-20.9-9.8-33.8C124.3,391.8,111.9,389.4,103.9,383.6z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Maho" class="st0">
|
||||
<g class="st1">
|
||||
<path class="st14" d="M150.5,404l3.3-1.9v-2.8l-0.9-0.9v-7.5l15.5-6.1l2.8-3.8l-3.3-4.2l-7-1.9l-5.2,6.6l1.4-7L146.3,388
|
||||
l2.8-12.7l-6.1,6.6l0.9-8.9l-4.7,6.1h-2.8l-6.6,10.3c1.9-4.7,3.5-9.4,4.9-14.3c1.4-4.8,2.4-9.6,3-14.3l-4.2-0.5l-4.7,3.8
|
||||
l-0.5-4.2c-6.3,3.4-11.9,8.5-16.9,15.2c-5,6.7-10.2,13.4-15.5,19.9c3.1-5.3,6.5-10.7,10.1-16.2c3.6-5.5,7.6-10.9,12-16.2
|
||||
l-4.7,0.5l1.4-4.7c-5.6,3.8-10.8,8.1-15.5,13.1c-4.7,5-7.8,11.7-9.4,20.2c-0.3-3.1-0.5-6.2-0.5-9.1c0-3,0.2-6,0.5-9.1l-3.3-2.3
|
||||
l-3.3,2.8c-0.6-2.8-0.2-5.7,1.2-8.7c1.4-3,3.5-5.9,6.3-8.7c-3.1-5.9-6.8-10.3-11-13.1s-8.7-4.8-13.4-6.1c4.1-2.2,6-4.6,5.9-7.3
|
||||
c-0.2-2.7-1.5-5.5-4-8.7c-2.5-2.2-4.7-4.6-6.6-7.3c-1.9-2.7-3.8-5.4-5.6-8.2l8.4-8.9c-8.1-9.7-13.6-18.7-16.4-27
|
||||
c-2.8-8.3-3.4-15.7-1.9-22.3c10,11.9,20.8,22.9,32.3,33c11.6,10.2,25,18.4,40.3,24.6c7.2,2.2,12.4,2,15.7-0.7
|
||||
c3.3-2.7,4.6-7.6,4-14.8l-29.5-82.5c-3.4-10.3-4.4-21-2.8-32.1c1.6-11.1,6.6-21.3,15-30.7l30.9-33.3l-2.3,7
|
||||
c10.6-5,18-14.3,22.3-27.9s6.6-27.1,7.3-40.5l1.9-5.2c1.2,14.4,0.3,28.4-2.8,42.2c-3.1,13.8-10,26.9-20.6,39.4l9.8-8.4
|
||||
l-26.3,37.5c-5.3,6.9-8.8,14.5-10.3,22.7c-1.6,8.3-0.6,17.4,2.8,27.4c4.1,15.9,9.7,31.1,16.9,45.5c7.2,14.4,15.6,28.1,25.3,41.3
|
||||
c2.2-2.5,4.4-3.6,6.6-3.3c2.2,0.3,4.5,1.9,7,4.7c1.2-2.8,1.5-6.5,0.7-11c-0.8-4.5-1.8-9.1-3-13.8l8,18.8l-1.4-9.4l10.8,22h2.8
|
||||
l6.1,8l3.3-6.6l9.8,0.9l0.5-3.3l2.8,3.3l-0.5-7l2.8-2.3l1.9,2.8l-7-47.3c-2.2-17.2-3.1-27.7-2.8-31.6c0.3-3.9,1.9-10.7,4.7-20.4
|
||||
l12.2-36.6l9.8-2.8l0.9,9.4l-8.9,49.2c-1.3,5.9-2.1,11.8-2.6,17.6c-0.5,5.8-0.1,12,1.2,18.5l15.9,52.5l2.3-3.3l1.4,5.6l8.4-3.8
|
||||
l0.5,5.6l7,0.5c0.6-2.2,1.4-4.3,2.3-6.3c0.9-2,2-4,3.3-5.9l1.4,8.4l2.8,1.9l1.9,1.9l0.5-4.2l2.8-0.9c0.9-5.3,2.3-10.6,4.2-15.9
|
||||
c1.9-5.3,3.9-10.5,6.1-15.5c-1.3,3.8-2.3,7.6-3.3,11.5c-0.9,3.9-1.6,7.7-1.9,11.5l3.3-0.9c0-3.8,0.6-7.3,1.9-10.5
|
||||
c1.2-3.3,2.7-6.5,4.2-9.6c-0.6,3.1-1.2,6.3-1.6,9.4c-0.5,3.1-0.4,6.3,0.2,9.4h2.8l5.2,4.2h3.3c6.6-8.7,13.4-20.8,20.4-36.1
|
||||
c7-15.3,14.1-33.6,21.3-54.8c4.1-11.3,5.2-22.1,3.3-32.6c-1.9-10.5-4.8-20.7-8.9-30.7c-7.8-15.3-17.3-28.8-28.6-40.5
|
||||
S309.6,68,313.7,33.6c-0.6,12.2,0.6,23.5,3.8,34c3.1,10.5,9.5,19.8,19.2,27.9l-9.8-22l52,68c6.2,11.6,10.1,23.7,11.5,36.3
|
||||
s-0.9,26.6-6.8,42c-5,15-10.1,30.1-15.2,45.2c-5.2,15.2-8.7,29.3-10.5,42.4c19.4-4.4,37.9-13.3,55.5-26.7
|
||||
c17.7-13.4,34.6-30.3,50.9-50.6l-6.6,17.3l5.6-8l3.3,5.2c0.6,4.7-1.6,12-6.8,21.8s-6.3,18-3.5,24.6c-7.2,3.4-12.1,8.3-14.8,14.5
|
||||
c-2.7,6.3-1.3,15.2,4,26.7c1.6,3.8,2.9,7.5,4,11.3c1.1,3.8,1.3,7.7,0.7,11.7c-1.3-3.4-2.8-6.2-4.7-8.4c-1.9-2.2-4.4-3.8-7.5-4.7
|
||||
l-1.4,20.2c-1.3-1.6-2.5-2.9-3.8-4c-1.3-1.1-2.7-1.9-4.2-2.6l-2.8,5.6l-4.2-4.7l-1.9,0.9l7,8l-4.7,0.5l3.3,6.6l-4.7-3.8l-2.8,1.4
|
||||
v4.7l-4.2-4.2l-5.2-0.5c1.9,3.1,3.4,6.3,4.7,9.6c1.2,3.3,1.9,6.5,1.9,9.6c-1.9-5-4-9.3-6.3-12.9c-2.3-3.6-4.9-6.6-7.7-9.1
|
||||
c0.9,5.6,2,11.1,3.3,16.4c1.2,5.3,2.5,10.8,3.8,16.4c-3.4-9.7-7.7-18-12.7-25.1c-5-7-10.9-12.4-17.8-16.2l8.9,10.3l-6.6-4.2
|
||||
l0.5,2.8c2.5,2.8,5.1,5.7,7.7,8.7c2.7,3,5.4,6.2,8.2,9.6c-3.1-2.8-6.2-5.5-9.1-8.2c-3-2.7-6-5.4-9.1-8.2l0.9,4.2
|
||||
c-2.2-1.9-4.5-3.7-6.8-5.4c-2.3-1.7-4.6-3.2-6.8-4.5c6.6,8.8,11.6,16.7,15.2,23.9c3.6,7.2,5.9,13.9,6.8,20.2
|
||||
c-4.1-8.7-8.3-16.6-12.7-23.4c-4.4-6.9-8.9-13-13.6-18.3l-5.2,2.8l12.2,23.4l-5.6-4.2l-0.9,3.3l-1.4-8l-3.3-2.3l-1.9,3.3
|
||||
l-1.9-2.8l-8.9-9.4l6.1,12.7l-10.8-9.4l8.9,18.3l-15-21.1l-1.4,4.7l7,8.9v3.3l-2.8,6.1l3.8,2.3v6.6c-1.9,5.6-4.2,10.8-7,15.5
|
||||
s-5.6,9.2-8.4,13.6l-2.3,2.3l-1.9,4.7c-12.5,7.5-25,14.8-37.5,22c-12.5,7.2-23.4,14.1-32.8,20.6c-16.9-9.4-35.3-18.7-55.3-27.9
|
||||
c-20-9.2-34.5-24.3-43.6-45.2L150.5,404z M216.2,346.1c2.2-0.5,4.8-0.5,8-0.2c-13.4-12.5-25.2-21-35.4-25.5
|
||||
c-10.2-4.5-17.6-2.4-22.3,6.3c7.2,11.3,14.5,19.1,21.8,23.4c7.3,4.4,14.6,3.9,21.8-1.4C211.9,347.4,214,346.5,216.2,346.1z
|
||||
M317.4,338.3c1.9-1.9,3.4-3.7,4.5-5.4c1.1-1.7,1.3-3.4,0.7-4.9c-4.4-5.6-15.3-5.9-32.8-0.7c-17.5,5.2-26.3,12.1-26.3,20.9
|
||||
l23,14.1c5.3-1.6,10.7-4.1,16.2-7.5c5.5-3.4,11-7.3,16.6-11.7L317.4,338.3z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Ninjutsu" class="st0">
|
||||
<g class="st1">
|
||||
<path d="M218,332.7v-0.9l-0.5-0.5c-13.4,8.4-27.3,15.5-41.7,21.1c-14.7,5.3-29.8,9.4-45.5,12.2c-15.6,2.8-31.7,4.5-48.3,5.2
|
||||
c-16.6,0.6-33.6,0.3-51.1-0.9c7.8-12.2,16.2-24.1,25.3-35.6c9.1-11.6,19.3-22.6,30.7-33c11.4-10.5,24-20.2,37.7-29.3
|
||||
c13.7-9.1,29.2-17.3,46.4-24.8l10.8-25.3h0.9l0.5-0.5c-8.4-13.4-15.5-27.3-21.1-41.7c-5.3-14.7-9.4-29.8-12.2-45.5
|
||||
c-2.8-15.6-4.5-31.7-5.2-48.3c-0.6-16.6-0.3-33.6,0.9-51.1c12.2,7.8,24.1,16.3,35.6,25.3c11.6,9.1,22.6,19.3,33,30.7
|
||||
c10.5,11.4,20.2,24,29.3,37.7c9.1,13.8,17.3,29.2,24.8,46.4l25.3,10.8v0.9l0.5,0.5c13.4-8.4,27.3-15.5,41.7-21.1
|
||||
c14.7-5.3,29.8-9.4,45.5-12.2c15.6-2.8,31.7-4.5,48.3-5.2c16.6-0.6,33.6-0.3,51.1,0.9c-7.8,12.2-16.3,24.1-25.3,35.6
|
||||
c-9.1,11.6-19.3,22.6-30.7,33c-11.4,10.5-24,20.2-37.7,29.3c-13.8,9.1-29.2,17.3-46.4,24.8l-10.8,25.3h-0.9l-0.5,0.5
|
||||
c8.4,13.4,15.5,27.3,21.1,41.7c5.3,14.7,9.4,29.8,12.2,45.5c2.8,15.6,4.5,31.7,5.2,48.3c0.6,16.6,0.3,33.6-0.9,51.1
|
||||
c-12.2-7.8-24.1-16.2-35.6-25.3c-11.6-9.1-22.6-19.3-33-30.7c-10.5-11.4-20.2-24-29.3-37.7c-9.1-13.7-17.3-29.2-24.8-46.4
|
||||
L218,332.7z M296.3,258.6c0-11.3-3.9-20.8-11.7-28.6c-7.8-7.8-17.3-11.7-28.6-11.7s-20.8,3.9-28.6,11.7
|
||||
c-7.8,7.8-11.7,17.3-11.7,28.6s3.9,20.8,11.7,28.6c7.8,7.8,17.3,11.7,28.6,11.7s20.8-3.9,28.6-11.7
|
||||
C292.4,279.4,296.3,269.9,296.3,258.6z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="unknow" class="st0">
|
||||
<g class="st1">
|
||||
<path d="M176.3,350.1c-15.6-11.3-31.3-21.8-46.9-31.6c-15.6-9.8-31.3-19-46.9-27.4c-15.9-8.4-31.7-16.4-47.3-23.9
|
||||
c-2.5-1.9-3.8-3.8-4-5.9c-0.2-2,1-4.3,3.5-6.8c16.6-7.5,33.4-16.9,50.6-28.1c17.2-10.9,34.8-22.7,53-35.2
|
||||
c18.1-12.5,36.6-25.2,55.3-38c19.1-12.5,38.4-24.2,58.1-35.2c15,14.1,31.9,26.7,50.6,38s38.3,22.3,58.6,33
|
||||
c20.3,10.8,40.8,22.1,61.4,34c20.3,11.6,39.8,24.8,58.6,39.8c-15.9,10-32,19.8-48.3,29.5c-15.9,9.4-31.8,18.8-47.6,28.4
|
||||
c-15.8,9.5-31.3,19.3-46.6,29.3c-15.3,10-30.3,20.8-45,32.3c-10.9,9.4-22.2,14.8-33.8,16.4c-11.6,1.6-23.6-2.5-36.1-12.2
|
||||
C207.7,373.8,191.9,361.6,176.3,350.1z M368.5,214.1c-13.8-7.8-27.3-15.9-40.5-24.1c-13.3-8.3-26.3-16.8-39.1-25.5
|
||||
c-13.1-8.4-26.1-17.3-38.9-26.7c-14.7,9.1-28.8,18.3-42.2,27.7c-13.8,9.1-27,18.2-39.8,27.4c-12.8,9.2-25.2,18.5-37,27.9
|
||||
c-11.6,9.1-22.8,18.3-33.8,27.7c13.4,6.9,26.9,14.1,40.3,21.6c13.1,7.8,26.3,15.7,39.4,23.7s26.1,16.2,38.9,24.6
|
||||
c13.1,8.8,25.9,17.5,38.4,26.3c11.6-9.4,23.6-18.6,36.1-27.7c12.2-9.4,24.8-18.5,37.7-27.4c13-8.9,26.2-17.7,39.6-26.5
|
||||
c13.4-8.7,27.3-17.5,41.7-26.3C395.5,229.4,381.9,221.9,368.5,214.1z M160.4,244.1c14.7-12.2,29.9-22.2,45.7-30
|
||||
c15.8-7.8,30.9-18.9,45.2-33.3c12.5,9.1,25.5,17.7,38.9,26c13.4,8.3,27.5,16.3,42.2,24.1c1.9,1.3,3.4,2.8,4.7,4.7
|
||||
c1.2,1.9,1.2,4.8,0,8.9c-19.1,4.1-35,12.6-47.8,25.5c-12.8,13-25.9,23.7-39.4,32.1c-8.8-12.2-21.1-22.9-37-32.1
|
||||
C196.9,260.9,179.4,252.2,160.4,244.1z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Rituals" class="st0">
|
||||
<g class="st1">
|
||||
<path class="st15" d="M115.1,440.3c9.5-9.5,13.7-20.7,12.4-33.5c-6.3-5.3-11.4-11.2-15.5-17.6c-4.1-6.4-6.6-13.5-7.5-21.3
|
||||
c-8.4-2.8-16-6.6-22.7-11.3c-6.7-4.7-12.9-10.3-18.5-16.9V313c6.9-8.1,15.4-14.3,25.5-18.5c10.2-4.2,21-7.4,32.6-9.6
|
||||
c9.7-16.6,22.1-28.4,37.3-35.4c15.2-7,30.9-11.5,47.1-13.4L146.3,98.3c10,0.3,18,2,24.1,5.2c6.1,3.1,9.1,8.4,9.1,15.9l36.6,115.8
|
||||
c6.9-0.6,13.5-1,19.9-1.2c6.4-0.2,12.6-0.2,18.5-0.2l-6.1-200.2c10.9,2.2,19,5.8,24.1,10.8c5.2,5,6.6,11.7,4.5,20.2l-11.7,169.2
|
||||
c4.7,0,9.4,0.1,14.1,0.2c4.7,0.2,9.4,0.4,14.1,0.7l35.2-112.5c-0.6-8.1,2.1-13.9,8.2-17.3c6.1-3.4,14.3-5.5,24.6-6.1l-58.6,136.9
|
||||
c16.6,1.9,32.8,6.3,48.8,13.1c15.9,6.9,28.9,18.9,38.9,36.1c11.9,2.2,22.9,5.4,33,9.6c10.2,4.2,18.7,10.4,25.5,18.5v26.7
|
||||
c-5.6,6.6-11.9,12.2-18.8,16.9c-6.9,4.7-14.5,8.4-23,11.3c-0.9,7.8-3.4,14.9-7.3,21.3c-3.9,6.4-9.1,12.3-15.7,17.6
|
||||
c-0.9,12.8,3.3,24,12.7,33.5c9.4,9.5,23.1,17.6,41.3,24.1c-9.4,16.6-24.8,22.3-46.2,17.1c-21.4-5.2-34.5-24.3-39.1-57.4
|
||||
c-14.1,5.6-29.5,9.8-46.4,12.4c-16.9,2.7-33.8,4-50.6,4c-16.6,0-33.4-1.3-50.4-4c-17-2.7-32.6-6.8-46.6-12.4
|
||||
c-4.7,33.1-17.7,52.3-38.9,57.4c-21.3,5.2-36.7-0.5-46.4-17.1C91.8,457.9,105.6,449.8,115.1,440.3z M361.5,272.9
|
||||
c-15.9-10.2-38-16.8-66.1-19.9l-11.7,27.2l-3.3-2.8l8-24.8c-4.1-0.3-8-0.6-12-0.9c-3.9-0.3-7.9-0.5-12-0.5l-1.9,24.8l-6.6,7.5
|
||||
l-0.9-32.3c-5.9,0-11.6,0.2-17.1,0.5c-5.5,0.3-10.9,0.6-16.2,0.9l8,24.8l-4.2,5.2l-12.2-29.1c-27.2,3.4-48.4,10.2-63.5,20.4
|
||||
c-15.2,10.2-22.7,23.5-22.7,40.1c0,7.5,4.2,13.3,12.7,17.3c8.4,4.1,19,7.1,31.6,9.1c12.7,2,26.6,3.4,42,4
|
||||
c15,0.3,29.2,0.6,42.7,0.9c13.4-0.3,27.8-0.6,43.1-0.9c15-0.6,28.9-1.9,41.7-4c12.8-2,23.4-5.1,31.9-9.1
|
||||
c8.4-4.1,12.7-9.8,12.7-17.3C385.4,296.8,377.4,283.1,361.5,272.9z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Shujis" class="st0">
|
||||
<g class="st1">
|
||||
<path class="st13" d="M99.2,415.7c-2.3-2.2-4.8-3.9-7.3-5.2c-34.1-19.1-53.8-55.2-59.1-108.3c-5.6-52.8,2.7-102.1,24.8-147.9
|
||||
c22.2-45.8,58-77.9,107.3-96.3c49.4-18.1,111.9-2.2,187.5,47.8c-46.3-20.3-89.1-26.4-128.4-18.3c-39.4,8.1-69.6,24.2-90.7,48.3
|
||||
c-21.1,24.1-30.1,53-27,86.7c3.4,33.8,24.5,65.9,63.3,96.6c7.2,5.3,12.1,12.9,14.8,22.7c2.7,9.8,3.8,19.1,3.5,27.9
|
||||
c0,6.3-1.3,12.4-4,18.5c-2.7,6.1-6,11.5-10.1,16.2c-4.1,4.7-8.9,8.6-14.5,11.7c-5.6,3.1-11.4,5.5-17.3,7
|
||||
c-5.6,1.3-11.5,1.6-17.6,0.9c-6.1-0.6-12-1.9-17.6-3.8C104.1,419.4,101.5,417.9,99.2,415.7z M191.1,442.6
|
||||
c17.3-9.2,28.5-28.4,33.5-57.4c-5,8.4-9.7,14.8-14.1,19c-4.4,4.2-8.6,7.9-12.7,11c9.1-11.6,16.9-23.7,23.4-36.6
|
||||
c6.6-12.8,12.8-24.6,18.8-35.4c5.9-10.8,12-19.8,18.3-27c6.6-7.5,14.4-11.4,23.4-11.7l40.8,38v35.6c-4.1,8.8-8.9,16.4-14.5,23
|
||||
s-12,11.9-19.2,15.9c-8.8,13.8-18.9,24.4-30.5,31.9c-11.3,7.2-23.8,11.8-37.7,13.8c-13.9,2-28.7,1.8-44.3-0.7
|
||||
c-15.9-2.5-32.5-6.6-49.7-12.2C152.2,454.3,173.7,451.9,191.1,442.6z M297.3,269.9c12.8-19.1,25.3-34.8,37.5-47.3
|
||||
c11.9-12.8,24.1-25.9,36.6-39.4c12.5-13.4,25.6-29.2,39.4-47.3c13.7-17.8,28.6-41.7,44.5-71.7l11.7,1.9l0.5,14.1l5.2,0.9
|
||||
l-0.5,11.3L481,103l-6.1,7.5l-0.5,14.1c-11.3,11.3-21.7,25-31.4,41.3c-9.7,16.3-19.1,33.2-28.4,50.9
|
||||
c-9.2,17.7-18.4,35.1-27.4,52.3c-9.1,17.5-18.6,33.1-28.6,46.9L297.3,269.9z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Invocations">
|
||||
<g>
|
||||
<path class="st16" d="M122.9,85.7c-0.3-1.9,0.5-3.8,2.6-5.6c2-1.9,4.9-3.8,8.7-5.6c1.2,4.7,6.6,8,15.9,9.8s20.3,1.9,32.8,0
|
||||
c12.8-1.9,23.4-5.2,31.9-10.1c8.4-4.8,12.3-9.6,11.7-14.3v-0.5c3.4,0.6,6.3,1.6,8.7,3s3.7,3,4,4.9l28.6,140.2h21.6l-30-144.8
|
||||
c0.6-0.3,1.2-0.6,1.9-0.9c0.6-0.3,1.1-0.6,1.4-0.9l0.9-4.2c-0.3-2.2,1.5-4.4,5.4-6.6c3.9-2.2,8.8-3.8,14.8-4.7
|
||||
c5.9-0.6,11.1-0.5,15.5,0.5c4.4,0.9,6.7,2.5,7,4.7l2.3,3.3c0.6,0,1.4,0.2,2.3,0.5c0.9,0.3,1.7,0.6,2.3,0.9l37.5,180.5
|
||||
c-6.3,9.4-18,17.3-35.2,23.9c-17.2,6.9-35.7,11.8-55.5,14.8c-19.8,3-39.1,3.8-57.9,2.6c-18.4-1.2-32.2-5.3-41.3-12.2L122.9,85.7z
|
||||
M151.5,63.9c-8.1-1.7-12.5-4.6-13.1-8.7c-0.6-4.1,2.7-8,9.8-12c7.2-3.9,16.2-6.8,27.2-8.7c10.6-1.6,20-1.5,28.1,0.2
|
||||
c8.1,1.7,12.5,4.6,13.1,8.7c0.6,4.1-2.7,8.1-9.8,12.2c-7.2,4.1-16.3,6.9-27.2,8.4C169,65.7,159.6,65.6,151.5,63.9z M197.9,145.7
|
||||
c-9.1,1.3-17.7,1.7-25.8,1.4c-8.1-0.3-15.8-1.4-23-3.3l25.3,113c6.2,3.1,13.4,5.2,21.6,6.3c8.1,1.1,17,1.3,26.7,0.7L197.9,145.7z
|
||||
M339.4,432.6c-0.6,0-1.3-0.2-1.9-0.5c-0.6-0.3-1.4-0.6-2.3-0.9L311.8,321c-3.1,1.6-6.4,2.8-9.8,3.8c-3.4,0.9-6.7,1.6-9.8,1.9
|
||||
l22,106.9c1.2,6.6-3.8,12.3-15,17.3c-10.9,4.7-23.5,8-37.7,10.1c-14.2,2-27.6,2.6-40.1,1.6c-12.5-0.9-19.2-3.9-20.2-8.9
|
||||
l-32.8-153.8c9.1,6.9,22.8,10.9,41.3,12.2c18.4,1.3,37.6,0.4,57.4-2.6c19.8-3,38.4-7.9,55.5-14.8c17.2-6.6,29.1-14.4,35.6-23.4
|
||||
l0.9,5.6h1.9l28.6,134.5l-3.3,1.4l2.8,10.3c-0.9,0.6-1.8,1.3-2.6,1.9c-0.8,0.6-1.6,1.3-2.6,1.9l0.9,4.2c0.9,5-6,8.4-20.9,10.1
|
||||
c-14.8,1.7-22.7,0.1-23.7-4.9L339.4,432.6z M258.8,434l-21.1-99.4c-9.4,0-18.4-0.7-27-2.1c-8.6-1.4-17-3.7-25.1-6.8l23.9,107.8
|
||||
c8.4,1.9,16.7,2.8,24.8,2.8C242.6,436.3,250.7,435.5,258.8,434z M217.6,470.1c13.4,3.4,27.5,4.2,42.2,2.3
|
||||
c14.7-1.9,30.2-6.9,46.4-15c0.6,2.2,0.8,4.1,0.5,5.6c-0.3,1.6-1.3,3-2.8,4.2c-18.8,13.7-37.3,19.1-55.8,16.2
|
||||
c-18.4-3-28.6-5.6-30.5-7.7V470.1z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Katas" class="st0">
|
||||
<g class="st1">
|
||||
<path class="st17" d="M376,478.5l-14.1-30.9l-6.1,2.3l-72.7-96.1L263,369.3c-7.2,5.3-16.2,7.3-27,6.1c-10.8-1.2-19.5-5-26-11.3
|
||||
l-29.5-28.6l-50.6-1.9l26.3-30.5c4.1-4.7,10.1-7.4,18-8.2c8-0.8,14.1,0.9,18.5,4.9l42.2,37.5l23-18.8L92.9,89.4L82.6,33.6
|
||||
L133.2,59l175.3,221.7l24.4-16.9L308,212.7c-2.5-5.3-2.3-11.6,0.7-19c3-7.3,7.3-12.4,12.9-15.2l36.6-16.9L346,210.8l19.2,36.6
|
||||
c4.4,7.8,5.6,17.1,3.8,27.9s-6.3,18.8-13.1,24.1l-20.2,15l0.5,0.9l71.3,95.6l-3.8,5.2l25.8,22l-2.3,27.2l-24.4,18.3L376,478.5z"
|
||||
/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Clans" class="st0">
|
||||
<g id="Imperial" class="st1">
|
||||
<rect y="18.6" class="st18" width="512" height="493.4"/>
|
||||
<text transform="matrix(1 0 0 1 16 468.6476)" class="st19 st4 st5"></text>
|
||||
</g>
|
||||
<g id="Unicorn">
|
||||
<rect y="18.6" class="st3" width="512" height="493.4"/>
|
||||
<text transform="matrix(1 0 0 1 16 468.6476)" class="st20 st4 st5"></text>
|
||||
</g>
|
||||
<g id="Torttle">
|
||||
<rect y="18.6" class="st3" width="512" height="493.4"/>
|
||||
<text transform="matrix(1 0 0 1 16 468.6476)" class="st1 st4 st5"></text>
|
||||
</g>
|
||||
<g id="Scorpion">
|
||||
<rect y="18.6" class="st3" width="512" height="493.4"/>
|
||||
<text transform="matrix(1 0 0 1 16 468.6476)" class="st21 st4 st5"></text>
|
||||
</g>
|
||||
<g id="Phoenix">
|
||||
<rect y="18.6" class="st3" width="512" height="493.4"/>
|
||||
<text transform="matrix(1 0 0 1 16 468.6476)" class="st22 st4 st5"></text>
|
||||
</g>
|
||||
<g id="Mantis">
|
||||
<rect y="18.6" class="st3" width="512" height="493.4"/>
|
||||
<text transform="matrix(1 0 0 1 16 468.6476)" class="st23 st4 st5"></text>
|
||||
</g>
|
||||
<g id="Lion">
|
||||
<rect y="18.6" class="st3" width="512" height="493.4"/>
|
||||
<text transform="matrix(1 0 0 1 16 468.6476)" class="st24 st4 st5"></text>
|
||||
</g>
|
||||
<g id="Dragon">
|
||||
<rect y="18.6" class="st3" width="512" height="493.4"/>
|
||||
<text transform="matrix(1 0 0 1 16 468.6476)" class="st25 st4 st5"></text>
|
||||
</g>
|
||||
<g id="Crab">
|
||||
<rect y="18.6" class="st3" width="512" height="493.4"/>
|
||||
<text transform="matrix(1 0 0 1 16 468.6476)" class="st26 st4 st5"></text>
|
||||
</g>
|
||||
<g id="Crane">
|
||||
<rect y="18.6" class="st3" width="512" height="493.4"/>
|
||||
<text transform="matrix(1 0 0 1 16 468.6476)" class="st27 st4 st5"></text>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 48 KiB |
@@ -67,7 +67,7 @@
|
||||
},
|
||||
{
|
||||
"id": "Robes of Judgment",
|
||||
"name": "Robes of Judgment (WIP)",
|
||||
"name": "Robes de jugement",
|
||||
"description": "",
|
||||
"book_reference": "Les Royaumes Célestes p.97"
|
||||
},
|
||||
@@ -100,6 +100,18 @@
|
||||
"name": "Tosei-Gusoku",
|
||||
"description": "",
|
||||
"book_reference": "L’Outremonde p.106"
|
||||
},
|
||||
{
|
||||
"id": "Sailor's garb",
|
||||
"name": "Vêtements de marin",
|
||||
"description": "",
|
||||
"book_reference": "Le Clan de la Mante p.9"
|
||||
},
|
||||
{
|
||||
"id": "Shark leather armor",
|
||||
"name": "Armure en peau de requin",
|
||||
"description": "",
|
||||
"book_reference": "Le Clan de la Mante p.9"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
73
system/babele/fr-fr/l5r5e.core-bonds.json
Normal file
73
system/babele/fr-fr/l5r5e.core-bonds.json
Normal file
@@ -0,0 +1,73 @@
|
||||
{
|
||||
"label": "Liens",
|
||||
"mapping": {
|
||||
"description": "data.description",
|
||||
"book_reference": "data.book_reference",
|
||||
"bond_type": "data.bond_type"
|
||||
},
|
||||
"entries": [
|
||||
{
|
||||
"id": "Family",
|
||||
"name": "Familial",
|
||||
"description": "",
|
||||
"book_reference": "Les Cours de Pierre p.136",
|
||||
"bond_type": "Familial"
|
||||
},
|
||||
{
|
||||
"id": "Comrade",
|
||||
"name": "Amitié",
|
||||
"description": "",
|
||||
"book_reference": "Les Cours de Pierre p.137",
|
||||
"bond_type": "Amitié"
|
||||
},
|
||||
{
|
||||
"id": "Lover",
|
||||
"name": "Amoureux",
|
||||
"description": "",
|
||||
"book_reference": "Les Cours de Pierre p.137",
|
||||
"bond_type": "Amoureux"
|
||||
},
|
||||
{
|
||||
"id": "Rival",
|
||||
"name": "Rivalité",
|
||||
"description": "",
|
||||
"book_reference": "Les Cours de Pierre p.138",
|
||||
"bond_type": "Rivalité"
|
||||
},
|
||||
{
|
||||
"id": "Nemesis",
|
||||
"name": "Haine",
|
||||
"description": "",
|
||||
"book_reference": "Les Cours de Pierre p.138",
|
||||
"bond_type": "Haine"
|
||||
},
|
||||
{
|
||||
"id": "Old Flame",
|
||||
"name": "Ancien amour",
|
||||
"description": "",
|
||||
"book_reference": "La Voie des Vagues",
|
||||
"bond_type": "Ancien amour"
|
||||
},
|
||||
{
|
||||
"id": "Partner",
|
||||
"name": "Partenaire",
|
||||
"description": "",
|
||||
"book_reference": "La Voie des Vagues",
|
||||
"bond_type": "Partenaire"
|
||||
},
|
||||
{
|
||||
"id": "Protector and Ward",
|
||||
"name": "Protecteur et Gardien",
|
||||
"description": "",
|
||||
"book_reference": "La Voie des Vagues",
|
||||
"bond_type": "Protecteur et Gardien"
|
||||
},
|
||||
{
|
||||
"id": "Wanderers Fellowship",
|
||||
"name": "Fraternité des vagabonds",
|
||||
"description": "",
|
||||
"book_reference": "La Voie des Vagues",
|
||||
"bond_type": "Fraternité des vagabonds"
|
||||
}
|
||||
]
|
||||
}
|
||||
39
system/babele/fr-fr/l5r5e.core-item-patterns.json
Normal file
39
system/babele/fr-fr/l5r5e.core-item-patterns.json
Normal file
@@ -0,0 +1,39 @@
|
||||
{
|
||||
"label": "Procédés de fabrication",
|
||||
"mapping": {
|
||||
"description": "data.description",
|
||||
"book_reference": "data.book_reference"
|
||||
},
|
||||
"entries": [
|
||||
{
|
||||
"id": "Kakita Pattern",
|
||||
"name": "Procédé Kakita",
|
||||
"description": "",
|
||||
"book_reference": "L’Outremonde p.109"
|
||||
},
|
||||
{
|
||||
"id": "Kenzō Blade",
|
||||
"name": "Lame Kenzō",
|
||||
"description": "",
|
||||
"book_reference": "L’Outremonde p.109"
|
||||
},
|
||||
{
|
||||
"id": "Shirogane Jade Inlay",
|
||||
"name": "Incrustation de Jade de Shirogane",
|
||||
"description": "",
|
||||
"book_reference": "L’Outremonde p.109"
|
||||
},
|
||||
{
|
||||
"id": "Uchema’s Technique",
|
||||
"name": "Technique d’Uchema",
|
||||
"description": "",
|
||||
"book_reference": "L’Outremonde p.109"
|
||||
},
|
||||
{
|
||||
"id": "Yasunori Steel",
|
||||
"name": "Acier de Yasunori",
|
||||
"description": "",
|
||||
"book_reference": "L’Outremonde p.109"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -484,6 +484,24 @@
|
||||
"name": "Flèches fumigènes",
|
||||
"description": "",
|
||||
"book_reference": "L’Outremonde p.106"
|
||||
},
|
||||
{
|
||||
"id": "Astrolabe",
|
||||
"name": "Astrolabe",
|
||||
"description": "",
|
||||
"book_reference": "Le Clan de la Mante p.9"
|
||||
},
|
||||
{
|
||||
"id": "Fishing Rod and Line",
|
||||
"name": "Canne à pêche et ligne",
|
||||
"description": "",
|
||||
"book_reference": "Le Clan de la Mante p.9"
|
||||
},
|
||||
{
|
||||
"id": "TaraiBune",
|
||||
"name": "TaraiBune",
|
||||
"description": "",
|
||||
"book_reference": "Le Clan de la Mante p.9"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -565,6 +565,13 @@
|
||||
"types": "Malédiction, Physique",
|
||||
"description": "",
|
||||
"book_reference": "L’Outremonde p.99"
|
||||
},
|
||||
{
|
||||
"id": "Sailor’s Tongue",
|
||||
"name": "Parler du marin",
|
||||
"types": "Mental, Relations",
|
||||
"description": "",
|
||||
"book_reference": "Le Clan de la Mante p.7"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -446,6 +446,20 @@
|
||||
"types": "Relations",
|
||||
"description": "",
|
||||
"book_reference": "L’Outremonde p.96"
|
||||
},
|
||||
{
|
||||
"id": "Blood of Osano-Wo",
|
||||
"name": "Sang d’Osano-wo",
|
||||
"types": "Mental, Spirituel",
|
||||
"description": "",
|
||||
"book_reference": "Le Clan de la Mante p.7"
|
||||
},
|
||||
{
|
||||
"id": "Sea Legs",
|
||||
"name": "Pied marin",
|
||||
"types": "Physique",
|
||||
"description": "",
|
||||
"book_reference": "Le Clan de la Mante p.7"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -278,6 +278,13 @@
|
||||
"types": "Mental",
|
||||
"description": "",
|
||||
"book_reference": "L’Outremonde p.97"
|
||||
},
|
||||
{
|
||||
"id": "KnotWork",
|
||||
"name": "Noeuds",
|
||||
"types": "Mental",
|
||||
"description": "",
|
||||
"book_reference": "Le Clan de la Mante p.7"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -100,6 +100,36 @@
|
||||
"name": "Subtil",
|
||||
"description": "",
|
||||
"book_reference": "Livre de Règles p.241"
|
||||
},
|
||||
{
|
||||
"id": "Kakita Pattern",
|
||||
"name": "Procédé Kakita",
|
||||
"description": "",
|
||||
"book_reference": "L’Outremonde p.109"
|
||||
},
|
||||
{
|
||||
"id": "Kenzō Blade",
|
||||
"name": "Lame Kenzō",
|
||||
"description": "",
|
||||
"book_reference": "L’Outremonde p.109"
|
||||
},
|
||||
{
|
||||
"id": "Shirogane Jade Inlay",
|
||||
"name": "Incrustation de Jade de Shirogane",
|
||||
"description": "",
|
||||
"book_reference": "L’Outremonde p.109"
|
||||
},
|
||||
{
|
||||
"id": "Uchema’s Technique",
|
||||
"name": "Technique d’Uchema",
|
||||
"description": "",
|
||||
"book_reference": "L’Outremonde p.109"
|
||||
},
|
||||
{
|
||||
"id": "Yasunori Steel",
|
||||
"name": "Acier de Yasunori",
|
||||
"description": "",
|
||||
"book_reference": "L’Outremonde p.109"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
27
system/babele/fr-fr/l5r5e.core-signature-scrolls.json
Normal file
27
system/babele/fr-fr/l5r5e.core-signature-scrolls.json
Normal file
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"label": "Rouleaux de marque",
|
||||
"mapping": {
|
||||
"description": "data.description",
|
||||
"book_reference": "data.book_reference"
|
||||
},
|
||||
"entries": [
|
||||
{
|
||||
"id": "Ichi’s Second Sight",
|
||||
"name": "La seconde vision d’Ichi",
|
||||
"description": "",
|
||||
"book_reference": "L’Outremonde p.108"
|
||||
},
|
||||
{
|
||||
"id": "Hasegawa’s Denial",
|
||||
"name": "Le refus d’Hasegawa",
|
||||
"description": "",
|
||||
"book_reference": "L’Outremonde p.108"
|
||||
},
|
||||
{
|
||||
"id": "Maikara’s Rebuke",
|
||||
"name": "La mercuriale de Maikara",
|
||||
"description": "",
|
||||
"book_reference": "L’Outremonde p.108"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -198,8 +198,8 @@
|
||||
"book_reference": "Les Royaumes Célestes"
|
||||
},
|
||||
{
|
||||
"id": "Favored ounselor",
|
||||
"name": "Favored ounselor (WIP)",
|
||||
"id": "Favored Counselor",
|
||||
"name": "Favored Counselor (WIP)",
|
||||
"description": "",
|
||||
"book_reference": "Les Royaumes Célestes"
|
||||
},
|
||||
@@ -478,6 +478,12 @@
|
||||
"name": "Royaume d’encre et de papier",
|
||||
"description": "",
|
||||
"book_reference": "L’Outremonde p.95"
|
||||
},
|
||||
{
|
||||
"id": "Storm Lord’s Gambit",
|
||||
"name": "La manoeuvre de Sire Tempête",
|
||||
"description": "",
|
||||
"book_reference": "Le Clan de la Mante p.5"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -478,6 +478,12 @@
|
||||
"name": "Shikigami bardé de glyphes",
|
||||
"description": "",
|
||||
"book_reference": "L’Outremonde p.95"
|
||||
},
|
||||
{
|
||||
"id": "Sailor’s Fortune",
|
||||
"name": "La fortune du marin",
|
||||
"description": "",
|
||||
"book_reference": "Le Clan de la Mante p.5"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -424,6 +424,12 @@
|
||||
"name": "Roar of Encouragement (WIP)",
|
||||
"description": "",
|
||||
"book_reference": "La Voie des Vagues"
|
||||
},
|
||||
{
|
||||
"id": "Osano-wo’s Boast (Mantis)",
|
||||
"name": "Vantardise d'Osano-wo (Mante)",
|
||||
"description": "",
|
||||
"book_reference": "Le Clan de la Mante p.7"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
69
system/babele/fr-fr/l5r5e.core-titles.json
Normal file
69
system/babele/fr-fr/l5r5e.core-titles.json
Normal file
@@ -0,0 +1,69 @@
|
||||
{
|
||||
"label": "Titres",
|
||||
"mapping": {
|
||||
"description": "data.description",
|
||||
"book_reference": "data.book_reference"
|
||||
},
|
||||
"entries": [
|
||||
{
|
||||
"id": "Emerald Magistrate",
|
||||
"name": "Magistrat d’Émeraude",
|
||||
"description": "",
|
||||
"book_reference": "Livre de Règles p.305"
|
||||
},
|
||||
{
|
||||
"id": "Castellan",
|
||||
"name": "Châtelain",
|
||||
"description": "",
|
||||
"book_reference": "Les Cours de Pierre p.128"
|
||||
},
|
||||
{
|
||||
"id": "Covert Agent",
|
||||
"name": "Agent infiltré",
|
||||
"description": "",
|
||||
"book_reference": "Les Cours de Pierre p.128"
|
||||
},
|
||||
{
|
||||
"id": "Dreaded Enforcer",
|
||||
"name": "Homme de main redouté",
|
||||
"description": "",
|
||||
"book_reference": "Les Cours de Pierre p.129"
|
||||
},
|
||||
{
|
||||
"id": "Esteemed Negotiator",
|
||||
"name": "Négociateur estimé",
|
||||
"description": "",
|
||||
"book_reference": "Les Cours de Pierre p.129"
|
||||
},
|
||||
{
|
||||
"id": "Kenshinzen",
|
||||
"name": "Kenshinzen",
|
||||
"description": "",
|
||||
"book_reference": "Les Cours de Pierre p.130"
|
||||
},
|
||||
{
|
||||
"id": "Kyuden Asako Shieldbearer",
|
||||
"name": "Porteur de bouclier de Kyūden Asako",
|
||||
"description": "",
|
||||
"book_reference": "Les Cours de Pierre p.130"
|
||||
},
|
||||
{
|
||||
"id": "Master Artisan",
|
||||
"name": "Maître artisan",
|
||||
"description": "",
|
||||
"book_reference": "Les Cours de Pierre p.130"
|
||||
},
|
||||
{
|
||||
"id": "Winter Court Champion",
|
||||
"name": "Champion de la Cour d'Hiver",
|
||||
"description": "",
|
||||
"book_reference": "Les Cours de Pierre p.131"
|
||||
},
|
||||
{
|
||||
"id": "Seven fold Palace Acolyte",
|
||||
"name": "Etudiant au palais des Sept Plis",
|
||||
"description": "",
|
||||
"book_reference": "Les Cours de Pierre p.131"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -342,7 +342,7 @@
|
||||
"book_reference": "Livre de Règles p.237"
|
||||
},
|
||||
{
|
||||
"id": "BIte",
|
||||
"id": "Bite",
|
||||
"name": "Morsure",
|
||||
"category": "Attaques à mains nues",
|
||||
"grip_1": "",
|
||||
@@ -736,6 +736,60 @@
|
||||
"grip_2": "",
|
||||
"description": "",
|
||||
"book_reference": "L’Outremonde p.103"
|
||||
},
|
||||
{
|
||||
"id": "Butterfly sword",
|
||||
"name": "Epée papillon",
|
||||
"category": "Sabres",
|
||||
"grip_1": "",
|
||||
"grip_2": "",
|
||||
"description": "",
|
||||
"book_reference": "Le Clan de la Mante p.8"
|
||||
},
|
||||
{
|
||||
"id": "Eku",
|
||||
"name": "Eku",
|
||||
"category": "Armes d'Hast",
|
||||
"grip_1": "",
|
||||
"grip_2": "",
|
||||
"description": "",
|
||||
"book_reference": "Le Clan de la Mante p.8"
|
||||
},
|
||||
{
|
||||
"id": "Tinbe-Rochin",
|
||||
"name": "Rochin",
|
||||
"category": "Armes d'Hast",
|
||||
"grip_1": "",
|
||||
"grip_2": "",
|
||||
"description": "",
|
||||
"book_reference": "Le Clan de la Mante p.8"
|
||||
},
|
||||
{
|
||||
"id": "Sai",
|
||||
"name": "Sai",
|
||||
"category": "Armes de Poing",
|
||||
"grip_1": "",
|
||||
"grip_2": "",
|
||||
"description": "",
|
||||
"book_reference": "Le Clan de la Mante p.8"
|
||||
},
|
||||
{
|
||||
"id": "Tonfa",
|
||||
"name": "Tonfa",
|
||||
"category": "Armes de Poing",
|
||||
"grip_1": "",
|
||||
"grip_2": "",
|
||||
"description": "",
|
||||
"book_reference": "Le Clan de la Mante p.9"
|
||||
},
|
||||
{
|
||||
"id": "Tinbe",
|
||||
"name": "Timbe",
|
||||
"category": "Boucliers",
|
||||
"grip_1": "",
|
||||
"grip_2": "",
|
||||
"description": "",
|
||||
"book_reference": "Le Clan de la Mante p.8"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
BIN
system/fonts/Caballar.ttf
Normal file
BIN
system/fonts/Caballar.ttf
Normal file
Binary file not shown.
@@ -4,7 +4,20 @@
|
||||
"Maintainers": ["Team L5R"]
|
||||
},
|
||||
"SETTINGS": {
|
||||
"None": "No option"
|
||||
"None": "No option",
|
||||
"ReverseFatigueBar": "Reverse token fatigue bar",
|
||||
"RollNKeep": {
|
||||
"DeleteOldMessage": "RnK Delete previous chat message",
|
||||
"DeleteOldMessageHint": "Choose to keep or delete the previous message for a RnK series"
|
||||
},
|
||||
"Initiative": {
|
||||
"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)"
|
||||
},
|
||||
"CustomTechniques": {
|
||||
"Title": "Use custom techniques",
|
||||
"Hint": "Add 'Specificity' technique type to serve as a catch-all."
|
||||
}
|
||||
},
|
||||
"ACTOR": {
|
||||
"TypeCharacter": "Player Character",
|
||||
@@ -17,14 +30,17 @@
|
||||
"TypeTechnique": "Technique",
|
||||
"TypeProperty": "Property",
|
||||
"TypePeculiarity": "Peculiarity",
|
||||
"TypeAdvancement": "Advancement"
|
||||
"TypeAdvancement": "Advancement",
|
||||
"TypeTitle": "Title",
|
||||
"TypeBond": "Bond",
|
||||
"TypeSignature_scroll": "Signature Scroll",
|
||||
"TypeItem_pattern": "Item Pattern"
|
||||
},
|
||||
"l5r5e": {
|
||||
"global": {
|
||||
"ok": "OK",
|
||||
"add": "Add",
|
||||
"edit": "Edit",
|
||||
"delete": "Delete",
|
||||
"delete_confirm": "Are you sure you want to delete '{name}' ?",
|
||||
"drop_here": "Drop here",
|
||||
"edge_translation_disclaimer": ""
|
||||
},
|
||||
@@ -83,14 +99,19 @@
|
||||
"difficulty_hidden": "TN ???",
|
||||
"dicepicker": "Dice Picker",
|
||||
"void_point_used": "Void point used",
|
||||
"assistance_used": "Skill assistance used",
|
||||
"roll_n_keep": "Roll & Keep",
|
||||
"initiative_roll": "Initiative roll"
|
||||
"initiative_roll": "Initiative roll",
|
||||
"success_text": "Success!",
|
||||
"bonus_text": "bonus successes",
|
||||
"fail_text": "Fail!"
|
||||
},
|
||||
"dicepicker": {
|
||||
"difficulty_title": "Difficulty",
|
||||
"difficulty_hidden_label": "Hide TN",
|
||||
"use_void_point_label": "Spend a",
|
||||
"void_point_tooltip": "Void point",
|
||||
"skill_assistance_label": "Assistance",
|
||||
"roll_label": "Roll",
|
||||
"bt_add_macro": "Add a macro"
|
||||
},
|
||||
@@ -98,19 +119,28 @@
|
||||
"title": "L5R Roll & Keep",
|
||||
"discard_drop_here": "Discard",
|
||||
"reroll_drop_here": "Re-roll",
|
||||
"reroll_chat": "Re-rolled dice",
|
||||
"swap_drop_here": "Swap",
|
||||
"keep_drop_here": "Keep",
|
||||
"keep_chat": "New roll from an exploding die",
|
||||
"bt_validate": "Finalize"
|
||||
"bt_validate": "Finalize this step",
|
||||
"undo": "[GM] Undo the last step choices"
|
||||
},
|
||||
"gm_toolbox": {
|
||||
"title": "GM ToolBox",
|
||||
"difficulty_hidden": "Change difficulty visibility",
|
||||
"difficulty": "Change difficulty (right: add, left: subtract, middle: TN 2)",
|
||||
"sleep": "Comfortable rest for all characters (Remove Water x2 fatigue)",
|
||||
"sleep_info": "The characters had a good night's sleep.",
|
||||
"scene_end": "End of scene (Conflict and Fatigue half reset for all characters)",
|
||||
"scene_end_info": "The tension of the scene finally drops."
|
||||
},
|
||||
"max": "Max",
|
||||
"current": "Current",
|
||||
"quantity": "Quantity",
|
||||
"weight": "Weight",
|
||||
"properties": "Properties",
|
||||
"linked_property": "linked Property",
|
||||
"weapons": {
|
||||
"title": "Weapons",
|
||||
"title_new": "New Weapon",
|
||||
"damage": "Damage",
|
||||
"range": "Range",
|
||||
"stats": "Stats",
|
||||
@@ -122,20 +152,17 @@
|
||||
},
|
||||
"armors": {
|
||||
"title": "Armors",
|
||||
"title_new": "New Armor",
|
||||
"type": "Resistances",
|
||||
"physical": "physical",
|
||||
"supernatural": "supernatural",
|
||||
"equipped": "Equipped"
|
||||
},
|
||||
"items": {
|
||||
"title": "Items",
|
||||
"title_new": "New Item"
|
||||
"title": "Items"
|
||||
},
|
||||
"feats": "Feats",
|
||||
"techniques": {
|
||||
"title": "Techniques",
|
||||
"title_new": "New Technique",
|
||||
"not_allowed": "Your character does not use this type of technique.",
|
||||
"only_one": "Your character can possess only one of theses technique.",
|
||||
"type": "Allowed Techniques",
|
||||
@@ -148,10 +175,11 @@
|
||||
"maho": "Mahõ",
|
||||
"ninjutsu": "Ninjutsu",
|
||||
"school_ability": "School Ability",
|
||||
"mastery_ability": "Mastery Ability"
|
||||
"mastery_ability": "Mastery Ability",
|
||||
"title_ability": "Title Ability",
|
||||
"specificity": "Specificity"
|
||||
},
|
||||
"peculiarities": {
|
||||
"title_new": "New peculiarity",
|
||||
"types": {
|
||||
"distinction": "Distinction",
|
||||
"passion": "Passion",
|
||||
@@ -184,6 +212,7 @@
|
||||
"attitude": "Demeanor:",
|
||||
"advantages": "Distinctions and Passions",
|
||||
"disadvantages": "Adversities and Anxieties",
|
||||
"bonds": "Bonds",
|
||||
"npc": {
|
||||
"advantages": "Advantages",
|
||||
"disadvantages": "Disadvantages"
|
||||
@@ -294,16 +323,19 @@
|
||||
},
|
||||
"advancements": {
|
||||
"title": "Advancements",
|
||||
"title_new": "New advancement",
|
||||
"school_rank": "School rank",
|
||||
"school_rank_0": "Bg",
|
||||
"total": "Total",
|
||||
"cost": "Cost",
|
||||
"spent": "Used",
|
||||
"saved": "Saved",
|
||||
"total_xp_rank": "Xp spent",
|
||||
"total_xp_spent": "Xp spent",
|
||||
"total_xp_curriculum": "Xp spent on curriculum",
|
||||
"curriculum": "In curriculum",
|
||||
"curriculum_validate": "Complete this rank"
|
||||
"curriculum_validate": "Complete this rank",
|
||||
"rarity_modifier": "Rarity modifier",
|
||||
"item_pattern": "Item Patterns",
|
||||
"signature_scroll": "Signature Scrolls"
|
||||
},
|
||||
"character_types": {
|
||||
"character": "Player Character",
|
||||
|
||||
@@ -4,7 +4,20 @@
|
||||
"Maintainers": ["Team L5R"]
|
||||
},
|
||||
"SETTINGS": {
|
||||
"None": "Sin opción"
|
||||
"None": "Sin opción",
|
||||
"ReverseFatigueBar": "Invertir la barra de fatiga de los token",
|
||||
"RollNKeep": {
|
||||
"DeleteOldMessage": "TyG Eliminar el mensaje anterior del chat",
|
||||
"DeleteOldMessageHint": "Elige si mantener o borrar el mensaje anterior de la serie TyG"
|
||||
},
|
||||
"Initiative": {
|
||||
"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)"
|
||||
},
|
||||
"CustomTechniques": {
|
||||
"Title": "Use custom techniques",
|
||||
"Hint": "Add 'Specificity' technique type to serve as a catch-all."
|
||||
}
|
||||
},
|
||||
"ACTOR": {
|
||||
"TypeCharacter": "Personaje jugador",
|
||||
@@ -17,14 +30,17 @@
|
||||
"TypeTechnique": "Técnica",
|
||||
"TypeProperty": "Propiedad",
|
||||
"TypePeculiarity": "Peculiaridad",
|
||||
"TypeAdvancement": "Mejora"
|
||||
"TypeAdvancement": "Mejora",
|
||||
"TypeTitle": "Title",
|
||||
"TypeBond": "Bond",
|
||||
"TypeSignatureScroll": "Signature Scroll",
|
||||
"TypeItemPattern": "Item Pattern"
|
||||
},
|
||||
"l5r5e": {
|
||||
"global": {
|
||||
"ok": "OK",
|
||||
"add": "Añadir",
|
||||
"edit": "Editar",
|
||||
"delete": "Borrar",
|
||||
"delete_confirm": "¿Estás seguro de que quieres borrar '{name}' ?",
|
||||
"drop_here": "Dejar caer aquí",
|
||||
"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."
|
||||
},
|
||||
@@ -83,34 +99,48 @@
|
||||
"difficulty_hidden": "NO ???",
|
||||
"dicepicker": "Dice Picker",
|
||||
"void_point_used": "Punto de vacío utilizado",
|
||||
"assistance_used": "Asistencia de habilidad utilizada",
|
||||
"roll_n_keep": "Tirar y guardar",
|
||||
"initiative_roll": "Tirada de Iniciativa"
|
||||
"initiative_roll": "Tirada de Iniciativa",
|
||||
"success_text": "¡Éxito!",
|
||||
"bonus_text": "Éxitos adicionales",
|
||||
"fail_text": "¡Fallo!"
|
||||
},
|
||||
"dicepicker": {
|
||||
"difficulty_title": "Dificultad",
|
||||
"difficulty_hidden_label": "Ocultar NO",
|
||||
"use_void_point_label": "Gasta un",
|
||||
"void_point_tooltip": "Punto de vacío",
|
||||
"skill_assistance_label": "Asistencia",
|
||||
"roll_label": "Tirar",
|
||||
"bt_add_macro": "Añadir una macro"
|
||||
},
|
||||
"roll_n_keep": {
|
||||
"title": "L5R Roll & Keep",
|
||||
"title": "L5A Tirar y guardar",
|
||||
"discard_drop_here": "Descartar",
|
||||
"reroll_drop_here": "Relanzar",
|
||||
"reroll_chat": "Dados relanzados",
|
||||
"swap_drop_here": "Cambiar cara",
|
||||
"keep_drop_here": "Guardar",
|
||||
"keep_chat": "Nueva tirada de un dado relanzable",
|
||||
"bt_validate": "Finalizar"
|
||||
"bt_validate": "Terminar este paso",
|
||||
"undo": "[GM] Deshacer los últimos cambios"
|
||||
},
|
||||
"gm_toolbox": {
|
||||
"title": "GM ToolBox",
|
||||
"difficulty_hidden": "Cambiar la dificultad visible",
|
||||
"difficulty": "Cambiar dificultad (derecha: añadir, izquierda: sustraer, central: NO 2)",
|
||||
"sleep": "Descanso confortable para todos los personajes (Eliminar fatiga = Agua x2)",
|
||||
"sleep_info": "Los personajes han dormido bien.",
|
||||
"scene_end": "Final de la escena (El Conflicto y la Fatiga de los personajes se reduce hasta la mitad del máximo del valor)",
|
||||
"scene_end_info": "La tensión de la escena por fin disminuye."
|
||||
},
|
||||
"max": "Máx",
|
||||
"current": "Actuales",
|
||||
"quantity": "Cantidad",
|
||||
"weight": "Peso",
|
||||
"properties": "Propiedades",
|
||||
"linked_property": "linked Property",
|
||||
"weapons": {
|
||||
"title": "Armas",
|
||||
"title_new": "Nueva arma",
|
||||
"damage": "Daño",
|
||||
"range": "Alcance",
|
||||
"stats": "Estadísticas",
|
||||
@@ -122,15 +152,13 @@
|
||||
},
|
||||
"armors": {
|
||||
"title": "Armaduras",
|
||||
"title_new": "Nueva Armadura",
|
||||
"type": "Defensa",
|
||||
"physical": "física",
|
||||
"supernatural": "sobrenatural",
|
||||
"equipped": "Equipado"
|
||||
},
|
||||
"items": {
|
||||
"title": "Objetos",
|
||||
"title_new": "Nuevo objeto"
|
||||
"title": "Objetos"
|
||||
},
|
||||
"feats": "Logros",
|
||||
"techniques": {
|
||||
@@ -138,7 +166,6 @@
|
||||
"type": "Técnicas permitidas",
|
||||
"not_allowed": "Tu personaje no puede utilizar este tipo de técnica.",
|
||||
"only_one": "Tu personaje sólo puede poseer una de estas técnicas.",
|
||||
"title_new": "Nueva Técnica",
|
||||
"kata": "Kata",
|
||||
"kiho": "Kihõ",
|
||||
"inversion": "Inversion",
|
||||
@@ -147,11 +174,12 @@
|
||||
"shuji": "Shuji",
|
||||
"maho": "Mahõ",
|
||||
"ninjutsu": "Ninjutsu",
|
||||
"school_ability": "Habilidad de la escuela",
|
||||
"mastery_ability": "Habilidad de maestría"
|
||||
"school_ability": "Capacidad de escuela",
|
||||
"mastery_ability": "Habilidad de maestría",
|
||||
"title_ability": "Title Ability",
|
||||
"specificity": "Specificity"
|
||||
},
|
||||
"peculiarities": {
|
||||
"title_new": "Nueva peculiaridad",
|
||||
"types": {
|
||||
"distinction": "Distinción",
|
||||
"passion": "Pasión",
|
||||
@@ -184,6 +212,7 @@
|
||||
"attitude": "Actitud:",
|
||||
"advantages": "Distinciones y pasiones",
|
||||
"disadvantages": "Adversidades y ansiedades",
|
||||
"bonds": "Bonds",
|
||||
"npc": {
|
||||
"advantages": "Ventajas",
|
||||
"disadvantages": "Desventajas"
|
||||
@@ -286,24 +315,27 @@
|
||||
"duel": "Duelo",
|
||||
"skirmish": "Escaramuza",
|
||||
"mass_battle": "Batalla a gran escala",
|
||||
"prepared_true": "Prepared",
|
||||
"prepared_false": "Surprised",
|
||||
"prepared_null": "Defined in the character sheet (default)",
|
||||
"already_set": "Your initiative has already been drawn"
|
||||
"prepared_true": "Preparado",
|
||||
"prepared_false": "Sorprendido",
|
||||
"prepared_null": "Definido en la hoja de personaje (por defecto)",
|
||||
"already_set": "Tu iniciativa ya ha sido establecida."
|
||||
}
|
||||
},
|
||||
"advancements": {
|
||||
"title": "Avances",
|
||||
"title_new": "Nuevo avance",
|
||||
"school_rank": "Rango de la escuela",
|
||||
"school_rank_0": "Bg",
|
||||
"total": "Total",
|
||||
"cost": "Coste",
|
||||
"spent": "Gastado",
|
||||
"saved": "Guardado",
|
||||
"total_xp_rank": "PE gastados",
|
||||
"total_xp_spent": "PE gastados",
|
||||
"total_xp_curriculum": "Xp spent on curriculum",
|
||||
"curriculum": "En programa de estudio",
|
||||
"curriculum_validate": "Completar este rango"
|
||||
"curriculum_validate": "Completar este rango",
|
||||
"rarity_modifier": "Rarity modifier",
|
||||
"item_pattern": "Item patterns",
|
||||
"signature_scroll": "Signature scrolls"
|
||||
},
|
||||
"character_types": {
|
||||
"character": "Personaje jugador",
|
||||
|
||||
@@ -4,7 +4,20 @@
|
||||
"Maintainers": ["Team L5R"]
|
||||
},
|
||||
"SETTINGS": {
|
||||
"None": "Aucune option"
|
||||
"None": "Aucune option",
|
||||
"ReverseFatigueBar": "Inverser la barre de fatigue des token",
|
||||
"RollNKeep": {
|
||||
"DeleteOldMessage": "RnK Supprime le précédent message du chat",
|
||||
"DeleteOldMessageHint": "Si coché, on supprime le message précédent pour la série de jets via le RnK"
|
||||
},
|
||||
"Initiative": {
|
||||
"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)"
|
||||
},
|
||||
"CustomTechniques": {
|
||||
"Title": "Utiliser les techniques personnalisées",
|
||||
"Hint": "Ajoute un type de technique 'Particularités' pour servir de fourre-tout."
|
||||
}
|
||||
},
|
||||
"ACTOR": {
|
||||
"TypeCharacter": "Personnage Joueur",
|
||||
@@ -17,14 +30,17 @@
|
||||
"TypeTechnique": "Technique",
|
||||
"TypeProperty": "Propriété",
|
||||
"TypePeculiarity": "Particularité",
|
||||
"TypeAdvancement": "Progression"
|
||||
"TypeAdvancement": "Progression",
|
||||
"TypeTitle": "Titre",
|
||||
"TypeBond": "Lien",
|
||||
"TypeSignature_scroll": "Rouleau de marque",
|
||||
"TypeItem_pattern": "Procédé de fabrication"
|
||||
},
|
||||
"l5r5e": {
|
||||
"global": {
|
||||
"ok": "OK",
|
||||
"add": "Ajouter",
|
||||
"edit": "Modifier",
|
||||
"delete": "Supprimer",
|
||||
"delete_confirm": "Etes-vous sûr de vouloir supprimer '{name}' ?",
|
||||
"drop_here": "Déposez ici",
|
||||
"edge_translation_disclaimer": ""
|
||||
},
|
||||
@@ -83,34 +99,48 @@
|
||||
"difficulty_hidden": "ND ???",
|
||||
"dicepicker": "Dice Picker",
|
||||
"void_point_used": "Point de vide utilisé",
|
||||
"assistance_used": "Assistance de compétence utilisée",
|
||||
"roll_n_keep": "Roll & Keep",
|
||||
"initiative_roll": "Jet d'initiative"
|
||||
"initiative_roll": "Jet d'initiative",
|
||||
"success_text": "Succès !",
|
||||
"bonus_text": "succès bonus",
|
||||
"fail_text": "Échec !"
|
||||
},
|
||||
"dicepicker": {
|
||||
"difficulty_title": "Difficulté",
|
||||
"difficulty_hidden_label": "ND Caché",
|
||||
"use_void_point_label": "Dépenser un",
|
||||
"void_point_tooltip": "Point de Vide",
|
||||
"skill_assistance_label": "Assistance",
|
||||
"roll_label": "Lancer",
|
||||
"bt_add_macro": "Ajouter une macro"
|
||||
},
|
||||
"roll_n_keep": {
|
||||
"title": "L5R Roll & Keep",
|
||||
"discard_drop_here": "Discard",
|
||||
"reroll_drop_here": "Re-roll",
|
||||
"reroll_chat": "Re-rolled dice",
|
||||
"keep_drop_here": "Keep",
|
||||
"keep_chat": "New roll from a exploding dice",
|
||||
"bt_validate": "Finalize"
|
||||
"discard_drop_here": "Abandonner",
|
||||
"reroll_drop_here": "Relancer",
|
||||
"swap_drop_here": "Modifier",
|
||||
"keep_drop_here": "Garder",
|
||||
"bt_validate": "Finaliser cette étape",
|
||||
"undo": "[GM] Annuler les choix de la dernière étape"
|
||||
},
|
||||
"gm_toolbox": {
|
||||
"title": "GM ToolBox",
|
||||
"difficulty_hidden": "Modifier la visibilité de la difficulté",
|
||||
"difficulty": "Modifier la difficulté (droite: ajout, gauche: soustraction, milieu: ND 2)",
|
||||
"sleep": "Repos confortable pour tous les personnages (Enlève Eau x2 de fatigue)",
|
||||
"sleep_info": "Les personnages ont passé une bonne nuit de sommeil.",
|
||||
"scene_end": "Fin de scène (Conflit et Fatigue à moitié pour tous les personnages dont la valeur dépasse ce seuil)",
|
||||
"scene_end_info": "La tension de la scène retombe enfin"
|
||||
},
|
||||
"max": "Max",
|
||||
"current": "Actuel",
|
||||
"quantity": "Quantité",
|
||||
"weight": "Poids",
|
||||
"properties": "Propriétés",
|
||||
"linked_property": "Propriété liée",
|
||||
"weapons": {
|
||||
"title": "Armement",
|
||||
"title_new": "Nouvelle Arme",
|
||||
"damage": "Dégâts de base (DDB)",
|
||||
"range": "Portée (PRT)",
|
||||
"stats": "Attributs",
|
||||
@@ -122,20 +152,17 @@
|
||||
},
|
||||
"armors": {
|
||||
"title": "Armures",
|
||||
"title_new": "Nouvelle Armure",
|
||||
"type": "Défense",
|
||||
"physical": "Physique",
|
||||
"supernatural": "Spirituelle",
|
||||
"equipped": "Équipé"
|
||||
},
|
||||
"items": {
|
||||
"title": "Objets",
|
||||
"title_new": "Nouvel Objet"
|
||||
"title": "Objets"
|
||||
},
|
||||
"feats": "Prouesses",
|
||||
"techniques": {
|
||||
"title": "Techniques",
|
||||
"title_new": "Nouvelle Technique",
|
||||
"not_allowed": "Votre personnage n'utilise pas ce type de technique.",
|
||||
"only_one": "Votre personnage ne peut avoir qu'une seule de ces technique.",
|
||||
"type": "Type accessible",
|
||||
@@ -148,10 +175,11 @@
|
||||
"maho": "Mahõ",
|
||||
"ninjutsu": "Ninjutsu",
|
||||
"school_ability": "Capacité d'école",
|
||||
"mastery_ability": "Capacité de maîtrise"
|
||||
"mastery_ability": "Capacité de maîtrise",
|
||||
"title_ability": "Capacité de Titre",
|
||||
"specificity": "Particularité"
|
||||
},
|
||||
"peculiarities": {
|
||||
"title_new": "Nouvelle particularité",
|
||||
"types": {
|
||||
"distinction": "Aptitude",
|
||||
"passion": "Passion",
|
||||
@@ -184,6 +212,7 @@
|
||||
"attitude": "attitude :",
|
||||
"advantages": "Aptitudes et Passions",
|
||||
"disadvantages": "Coups du sort et défaillances",
|
||||
"bonds": "Liens",
|
||||
"npc": {
|
||||
"advantages": "Avantages",
|
||||
"disadvantages": "Désavantages"
|
||||
@@ -294,16 +323,19 @@
|
||||
},
|
||||
"advancements": {
|
||||
"title": "Progressions",
|
||||
"title_new": "Nouvelle progression",
|
||||
"school_rank": "Rang d'école",
|
||||
"school_rank_0": "Bg",
|
||||
"total": "Totale",
|
||||
"cost": "Coût",
|
||||
"spent": "Dépensée",
|
||||
"saved": "Restante",
|
||||
"total_xp_rank": "Xp dépensée",
|
||||
"total_xp_spent": "Xp dépensée",
|
||||
"total_xp_curriculum": "Xp dépensée dans le cursus",
|
||||
"curriculum": "Inclus dans le cursus",
|
||||
"curriculum_validate": "Valider la progression"
|
||||
"curriculum_validate": "Valider la progression",
|
||||
"rarity_modifier": "Modificateur de rareté",
|
||||
"item_pattern": "Procédés de fabrication",
|
||||
"signature_scroll": "Rouleaux de marque"
|
||||
},
|
||||
"character_types": {
|
||||
"character": "Personnage Joueur",
|
||||
|
||||
@@ -14,3 +14,5 @@
|
||||
{"_id":"L5RCoreArm000014","name":"O-yoroi","permission":{"default":0},"type":"armor","data":{"equipped":false,"quantity":1,"weight":"3","rarity":"8","zeni":"60 Koku","properties":[{"id":"L5RCorePro000006","name":"Cumbersome"},{"id":"L5RCorePro000010","name":"Resplendent"},{"id":"L5RCorePro000011","name":"Wargear"}],"armor":{"physical":"6","supernatural":""},"description":"","book_reference":"Shadowlands p.105"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/armor.svg","effects":[]}
|
||||
{"_id":"L5RCoreArm000015","name":"Tatami Gusoku","permission":{"default":0},"type":"armor","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"4","zeni":"7 koku","properties":[{"id":"L5RCorePro000011","name":"Wargear"}],"armor":{"physical":"3","supernatural":""},"description":"","book_reference":"Shadowlands p.106"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/armor.svg","effects":[]}
|
||||
{"_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":"","book_reference":"Shadowlands p.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":"","book_reference":"Mantis Clan p.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":"","book_reference":"Mantis Clan p.9"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/armor.svg","effects":[]}
|
||||
|
||||
9
system/packs/core-bonds.db
Normal file
9
system/packs/core-bonds.db
Normal file
@@ -0,0 +1,9 @@
|
||||
{"_id":"L5RCoreBon000001","name":"Family","permission":{"default":0},"type":"bond","data":{"bond_type":"Family","in_curriculum":false,"xp_used":0,"rank":1,"bought_at_rank":0,"ring":"void","xp_cost":3,"description":"","book_reference":"Court of Stones p.136"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/bond.svg","effects":[]}
|
||||
{"_id":"L5RCoreBon000002","name":"Comrade","permission":{"default":0},"type":"bond","data":{"bond_type":"Comrade","in_curriculum":false,"xp_used":0,"rank":1,"bought_at_rank":0,"ring":"void","xp_cost":3,"description":"","book_reference":"Court of Stones p.137"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/bond.svg","effects":[]}
|
||||
{"_id":"L5RCoreBon000003","name":"Lover","permission":{"default":0},"type":"bond","data":{"bond_type":"Lover","in_curriculum":false,"xp_used":0,"rank":1,"bought_at_rank":0,"ring":"void","xp_cost":3,"description":"","book_reference":"Court of Stones p.137"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/bond.svg","effects":[]}
|
||||
{"_id":"L5RCoreBon000004","name":"Rival","permission":{"default":0},"type":"bond","data":{"bond_type":"Rival","in_curriculum":false,"xp_used":0,"rank":1,"bought_at_rank":0,"ring":"void","xp_cost":3,"description":"","book_reference":"Court of Stones p.138"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/bond.svg","effects":[]}
|
||||
{"_id":"L5RCoreBon000005","name":"Nemesis","permission":{"default":0},"type":"bond","data":{"bond_type":"Nemesis","in_curriculum":false,"xp_used":0,"rank":1,"bought_at_rank":0,"ring":"void","xp_cost":3,"description":"","book_reference":"Court of Stones p.138"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/bond.svg","effects":[]}
|
||||
{"_id":"L5RCoreBon000006","name":"Old Flame","permission":{"default":0},"type":"bond","data":{"bond_type":"Old Flame","in_curriculum":false,"xp_used":0,"rank":1,"bought_at_rank":0,"ring":"void","xp_cost":3,"description":"","book_reference":"Path of Waves p.188"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/bond.svg","effects":[]}
|
||||
{"_id":"L5RCoreBon000007","name":"Partner","permission":{"default":0},"type":"bond","data":{"bond_type":"Partner","in_curriculum":false,"xp_used":0,"rank":1,"bought_at_rank":0,"ring":"void","xp_cost":3,"description":"","book_reference":"Path of Waves p.189"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/bond.svg","effects":[]}
|
||||
{"_id":"L5RCoreBon000008","name":"Protector and Ward","permission":{"default":0},"type":"bond","data":{"bond_type":"Protector and Ward","in_curriculum":false,"xp_used":0,"rank":1,"bought_at_rank":0,"ring":"void","xp_cost":3,"description":"","book_reference":"Path of Waves p.189"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/bond.svg","effects":[]}
|
||||
{"_id":"L5RCoreBon000009","name":"Wanderers Fellowship","permission":{"default":0},"type":"bond","data":{"bond_type":"Wanderers Fellowship","in_curriculum":false,"xp_used":0,"rank":1,"bought_at_rank":0,"ring":"void","xp_cost":3,"description":"","book_reference":"Path of Waves p.191"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/bond.svg","effects":[]}
|
||||
5
system/packs/core-item-patterns.db
Normal file
5
system/packs/core-item-patterns.db
Normal file
@@ -0,0 +1,5 @@
|
||||
{"_id":"L5RCoreItp000001","name":"Kakita 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":"L5RCorePro000017","description":"","book_reference":"Shadowlands p.109"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item_pattern.svg","effects":[]}
|
||||
{"_id":"L5RCoreItp000002","name":"Kenzō Blade","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":"L5RCorePro000018","description":"","book_reference":"Shadowlands p.109"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item_pattern.svg","effects":[]}
|
||||
{"_id":"L5RCoreItp000003","name":"Shirogane Jade Inlay","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":"2","linked_property_id":"L5RCorePro000019","description":"","book_reference":"Shadowlands p.109"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item_pattern.svg","effects":[]}
|
||||
{"_id":"L5RCoreItp000004","name":"Uchema’s Technique","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":"L5RCorePro000020","description":"","book_reference":"Shadowlands p.109"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item_pattern.svg","effects":[]}
|
||||
{"_id":"L5RCoreItp000005","name":"Yasunori Steel","permission":{"default":0},"type":"item_pattern","data":{"in_curriculum":false,"xp_used":0,"rank":1,"bought_at_rank":0,"ring":"void","xp_cost":"5","rarity_modifier":"4","linked_property_id":"L5RCorePro000021","description":"","book_reference":"Shadowlands p.109"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item_pattern.svg","effects":[]}
|
||||
@@ -78,3 +78,6 @@
|
||||
{"_id":"L5RCoreIte000078","name":"Sapper's Kit","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"3","zeni":"1 bu","properties":[],"description":"","book_reference":"Shadowlands p.107"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]}
|
||||
{"_id":"L5RCoreIte000079","name":"Engineer's Kit","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"3","zeni":"3 bu","properties":[],"description":"","book_reference":"Shadowlands p.107"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]}
|
||||
{"_id":"L5RCoreIte000080","name":"Smoke Arrows","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"4","zeni":"3 bu","properties":[],"description":"","book_reference":"Shadowlands p.107"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]}
|
||||
{"_id":"L5RCoreIte000081","name":"Astrolabe","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"10","zeni":"30 koku","properties":[],"description":"","book_reference":"Mantis Clan p.9"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]}
|
||||
{"_id":"L5RCoreIte000082","name":"Fishing Rod and Line","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"1","zeni":"1 bu","properties":[],"description":"","book_reference":"Mantis Clan p.9"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]}
|
||||
{"_id":"L5RCoreIte000083","name":"TaraiBune","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"3","rarity":"4","zeni":"1 koku","properties":[],"description":"","book_reference":"Mantis Clan p.9"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]}
|
||||
|
||||
@@ -78,3 +78,4 @@
|
||||
{"_id":"L5RCoreAdv000078","name":"Demon Wound","permission":{"default":0},"type":"peculiarity","data":{"in_curriculum":false,"xp_used":0,"rank":0,"bought_at_rank":0,"ring":"earth","peculiarity_type":"adversity","types":"Scar, Spiritual","description":"","book_reference":"Shadowlands p.97"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/peculiarity.svg","effects":[]}
|
||||
{"_id":"L5RCoreAdv000079","name":"Shadowlands Taint [Kansen Whispers]","permission":{"default":0},"type":"peculiarity","data":{"in_curriculum":false,"xp_used":0,"rank":0,"bought_at_rank":0,"ring":"air","peculiarity_type":"adversity","types":"Curse, Mental","description":"","book_reference":"Shadowlands p.99"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/peculiarity.svg","effects":[]}
|
||||
{"_id":"L5RCoreAdv000080","name":"Shadowlands Taint [Distorted Limbs]","permission":{"default":0},"type":"peculiarity","data":{"in_curriculum":false,"xp_used":0,"rank":0,"bought_at_rank":0,"ring":"earth","peculiarity_type":"adversity","types":"Curse, Physical","description":"","book_reference":"Shadowlands p.99"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/peculiarity.svg","effects":[]}
|
||||
{"_id":"L5RCoreAdv000081","name":"Sailor’s Tongue","permission":{"default":0},"type":"peculiarity","data":{"in_curriculum":false,"xp_used":0,"rank":0,"bought_at_rank":0,"ring":"air","peculiarity_type":"adversity","types":"Interpersonal, Mental","description":"","book_reference":"Mantis Clan p.7"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/peculiarity.svg","effects":[]}
|
||||
|
||||
@@ -61,3 +61,5 @@
|
||||
{"_id":"L5RCoreDis000061","name":"Dead Eyes","permission":{"default":0},"type":"peculiarity","data":{"in_curriculum":false,"xp_used":0,"rank":0,"bought_at_rank":0,"ring":"earth","peculiarity_type":"distinction","types":"Mental","description":"","book_reference":"Shadowlands p.96"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/peculiarity.svg","effects":[]}
|
||||
{"_id":"L5RCoreDis000062","name":"Light Sleeper","permission":{"default":0},"type":"peculiarity","data":{"in_curriculum":false,"xp_used":0,"rank":0,"bought_at_rank":0,"ring":"water","peculiarity_type":"distinction","types":"Physical","description":"","book_reference":"Shadowlands p.96"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/peculiarity.svg","effects":[]}
|
||||
{"_id":"L5RCoreDis000063","name":"Friend of the Nezumi","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":"","book_reference":"Shadowlands p.96"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/peculiarity.svg","effects":[]}
|
||||
{"_id":"L5RCoreDis000064","name":"Blood of Osano-Wo","permission":{"default":0},"type":"peculiarity","data":{"in_curriculum":false,"xp_used":0,"rank":0,"bought_at_rank":0,"ring":"fire","peculiarity_type":"distinction","types":"Mental, Spiritual","description":"","book_reference":"Mantis Clan p.7"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/peculiarity.svg","effects":[]}
|
||||
{"_id":"L5RCoreDis000065","name":"Sea Legs","permission":{"default":0},"type":"peculiarity","data":{"in_curriculum":false,"xp_used":0,"rank":0,"bought_at_rank":0,"ring":"water","peculiarity_type":"distinction","types":"Physical","description":"","book_reference":"Mantis Clan p.7"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/peculiarity.svg","effects":[]}
|
||||
|
||||
@@ -37,3 +37,4 @@
|
||||
{"_id":"L5RCorePas000037","name":"Attention","permission":{"default":0},"type":"peculiarity","data":{"in_curriculum":false,"xp_used":0,"rank":0,"bought_at_rank":0,"ring":"fire","peculiarity_type":"passion","types":"Mental","description":"","book_reference":"Path of Waves p.70"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/peculiarity.svg","effects":[]}
|
||||
{"_id":"L5RCorePas000038","name":"Passion for [Foreign Performing Art Form]","permission":{"default":0},"type":"peculiarity","data":{"in_curriculum":false,"xp_used":0,"rank":0,"bought_at_rank":0,"ring":"air","peculiarity_type":"passion","types":"Fame, Interpersonal","description":"","book_reference":"Path of Waves p.71"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/peculiarity.svg","effects":[]}
|
||||
{"_id":"L5RCorePas000039","name":"Creatures","permission":{"default":0},"type":"peculiarity","data":{"in_curriculum":false,"xp_used":0,"rank":0,"bought_at_rank":0,"ring":"fire","peculiarity_type":"passion","types":"Mental","description":"","book_reference":"Shadowlands p.97"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/peculiarity.svg","effects":[]}
|
||||
{"_id":"L5RCorePas000040","name":"KnotWork","permission":{"default":0},"type":"peculiarity","data":{"in_curriculum":false,"xp_used":0,"rank":0,"bought_at_rank":0,"ring":"air","peculiarity_type":"passion","types":"Mental","description":"","book_reference":"Mantis Clan p.7"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/peculiarity.svg","effects":[]}
|
||||
|
||||
@@ -14,3 +14,8 @@
|
||||
{"_id":"L5RCorePro000014","name":"Sacred","permission":{"default":0},"type":"property","data":{"description":"","book_reference":"Core Rulebook p.241"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/property.svg","effects":[]}
|
||||
{"_id":"L5RCorePro000015","name":"Durable","permission":{"default":0},"type":"property","data":{"description":"","book_reference":"Core Rulebook p.240"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/property.svg","effects":[]}
|
||||
{"_id":"L5RCorePro000016","name":"Subtle","permission":{"default":0},"type":"property","data":{"description":"","book_reference":"Core Rulebook p.241"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/property.svg","effects":[]}
|
||||
{"_id":"L5RCorePro000017","name":"Kakita Pattern","permission":{"default":0},"type":"property","data":{"description":"","book_reference":"Shadowlands p.109"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/property.svg","effects":[]}
|
||||
{"_id":"L5RCorePro000018","name":"Kenzō Blade","permission":{"default":0},"type":"property","data":{"description":"","book_reference":"Shadowlands p.109"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/property.svg","effects":[]}
|
||||
{"_id":"L5RCorePro000019","name":"Shirogane Jade Inlay","permission":{"default":0},"type":"property","data":{"description":"","book_reference":"Shadowlands p.109"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/property.svg","effects":[]}
|
||||
{"_id":"L5RCorePro000020","name":"Uchema’s Technique","permission":{"default":0},"type":"property","data":{"description":"","book_reference":"Shadowlands p.109"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/property.svg","effects":[]}
|
||||
{"_id":"L5RCorePro000021","name":"Yasunori Steel","permission":{"default":0},"type":"property","data":{"description":"","book_reference":"Shadowlands p.109"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/property.svg","effects":[]}
|
||||
|
||||
3
system/packs/core-signature-scrolls.db
Normal file
3
system/packs/core-signature-scrolls.db
Normal file
@@ -0,0 +1,3 @@
|
||||
{"_id":"L5RCoreSig000001","name":"Ichi’s Second Sight","permission":{"default":0},"type":"signature_scroll","data":{"in_curriculum":false,"xp_used":0,"rank":1,"bought_at_rank":0,"ring":"void","xp_cost":"3","description":"","book_reference":"Shadowlands p.108"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/signature_scroll.svg","effects":[]}
|
||||
{"_id":"L5RCoreSig000002","name":"Hasegawa’s Denial","permission":{"default":0},"type":"signature_scroll","data":{"in_curriculum":false,"xp_used":0,"rank":1,"bought_at_rank":0,"ring":"void","xp_cost":"3","description":"","book_reference":"Shadowlands p.108"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/signature_scroll.svg","effects":[]}
|
||||
{"_id":"L5RCoreSig000003","name":"Maikara’s Rebuke","permission":{"default":0},"type":"signature_scroll","data":{"in_curriculum":false,"xp_used":0,"rank":1,"bought_at_rank":0,"ring":"void","xp_cost":"3","description":"","book_reference":"Shadowlands p.108"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/signature_scroll.svg","effects":[]}
|
||||
@@ -65,11 +65,11 @@
|
||||
{"_id":"L5RCoreInv000065","name":"The Fading Dream","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"5","bought_at_rank":0,"ring":"air","technique_type":"invocation","xp_cost":"3","description":"","book_reference":"Celestial Realms p.106"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/invocation.svg","effects":[]}
|
||||
{"_id":"L5RCoreInv000066","name":"Bond of the Realms","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"3","bought_at_rank":0,"ring":"earth","technique_type":"invocation","xp_cost":"3","description":"","book_reference":"Celestial Realms p.107"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/invocation.svg","effects":[]}
|
||||
{"_id":"L5RCoreInv000067","name":"Guardian of the Secret Gate","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"5","bought_at_rank":0,"ring":"earth","technique_type":"invocation","xp_cost":"3","description":"","book_reference":"Celestial Realms p.107"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/invocation.svg","effects":[]}
|
||||
{"_id":"L5RCoreInv000068","name":"Emboldened Steed","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"3","bought_at_rank":0,"ring":"void","technique_type":"invocation","xp_cost":"3","description":"","book_reference":"Celestial Realms p.107"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/invocation.svg","effects":[]}
|
||||
{"_id":"L5RCoreInv000068","name":"Emboldened Steed","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"3","bought_at_rank":0,"ring":"earth","technique_type":"invocation","xp_cost":"3","description":"","book_reference":"Celestial Realms p.107"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/invocation.svg","effects":[]}
|
||||
{"_id":"L5RCoreInv000069","name":"Fluid Shadows","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"2","bought_at_rank":0,"ring":"water","technique_type":"invocation","xp_cost":"3","description":"","book_reference":"Celestial Realms p.108"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/invocation.svg","effects":[]}
|
||||
{"_id":"L5RCoreInv000070","name":"Heart of the Lady Sun","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"5","bought_at_rank":0,"ring":"fire","technique_type":"invocation","xp_cost":"3","description":"","book_reference":"Celestial Realms p.108"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/invocation.svg","effects":[]}
|
||||
{"_id":"L5RCoreInv000071","name":"Fires of Purity","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"2","bought_at_rank":0,"ring":"fire","technique_type":"invocation","xp_cost":"3","description":"","book_reference":"Celestial Realms p.108"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/invocation.svg","effects":[]}
|
||||
{"_id":"L5RCoreInv000072","name":"Amaterasu's Gaze","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"1","bought_at_rank":0,"ring":"fire","technique_type":"invocation","xp_cost":"3","description":"","book_reference":"Celestial Realms p.108"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/invocation.svg","effects":[]}
|
||||
{"_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":"void","technique_type":"invocation","xp_cost":"3","description":"","book_reference":"Celestial Realms p.109"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/invocation.svg","effects":[]}
|
||||
{"_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","technique_type":"invocation","xp_cost":"3","description":"","book_reference":"Celestial Realms p.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","technique_type":"invocation","xp_cost":"3","description":"","book_reference":"Celestial Realms p.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","technique_type":"invocation","xp_cost":"3","description":"","book_reference":"Shadowlands p.114"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/invocation.svg","effects":[]}
|
||||
|
||||
@@ -15,13 +15,13 @@
|
||||
{"_id":"L5RCoreKat000015","name":"Lord Hida’s Grip","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"2","bought_at_rank":0,"ring":"void","technique_type":"kata","xp_cost":"3","description":"","book_reference":"Core Rulebook p.176"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/kata.svg","effects":[]}
|
||||
{"_id":"L5RCoreKat000016","name":"Disappearing World Style","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"4","bought_at_rank":0,"ring":"air","technique_type":"kata","xp_cost":"3","description":"","book_reference":"Core Rulebook p.175"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/kata.svg","effects":[]}
|
||||
{"_id":"L5RCoreKat000017","name":"Crashing Wave Style","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"4","bought_at_rank":0,"ring":"water","technique_type":"kata","xp_cost":"3","description":"","book_reference":"Core Rulebook p.175"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/kata.svg","effects":[]}
|
||||
{"_id":"L5RCoreKat000018","name":"Crescent Moon Style","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"4","bought_at_rank":0,"ring":"fire","technique_type":"kata","xp_cost":"3","description":"","book_reference":"Core Rulebook p.175"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/kata.svg","effects":[]}
|
||||
{"_id":"L5RCoreKat000018","name":"Crescent Moon Style","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"2","bought_at_rank":0,"ring":"void","technique_type":"kata","xp_cost":"3","description":"","book_reference":"Core Rulebook p.175"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/kata.svg","effects":[]}
|
||||
{"_id":"L5RCoreKat000019","name":"Iron in the Mountains Style","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"4","bought_at_rank":0,"ring":"earth","technique_type":"kata","xp_cost":"3","description":"","book_reference":"Core Rulebook p.176"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/kata.svg","effects":[]}
|
||||
{"_id":"L5RCoreKat000020","name":"Breath of Wind Style","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"4","bought_at_rank":0,"ring":"void","technique_type":"kata","xp_cost":"3","description":"","book_reference":"Core Rulebook p.175"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/kata.svg","effects":[]}
|
||||
{"_id":"L5RCoreKat000020","name":"Breath of Wind Style","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"4","bought_at_rank":0,"ring":"air","technique_type":"kata","xp_cost":"3","description":"","book_reference":"Core Rulebook p.175"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/kata.svg","effects":[]}
|
||||
{"_id":"L5RCoreKat000021","name":"Thunderclap Strike","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"3","bought_at_rank":0,"ring":"air","technique_type":"kata","xp_cost":"3","description":"","book_reference":"Core Rulebook p.180"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/kata.svg","effects":[]}
|
||||
{"_id":"L5RCoreKat000022","name":"Iaijutsu Cut: Rising Blade","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"2","bought_at_rank":0,"ring":"void","technique_type":"kata","xp_cost":"3","description":"","book_reference":"Core Rulebook p.179"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/kata.svg","effects":[]}
|
||||
{"_id":"L5RCoreKat000023","name":"Iaijutsu Cut: Crossing Blade","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"2","bought_at_rank":0,"ring":"void","technique_type":"kata","xp_cost":"3","description":"","book_reference":"Core Rulebook p.179"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/kata.svg","effects":[]}
|
||||
{"_id":"L5RCoreKat000024","name":"Rushing Avalanche Style","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"2","bought_at_rank":0,"ring":"void","technique_type":"kata","xp_cost":"3","description":"","book_reference":"Core Rulebook p.180"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/kata.svg","effects":[]}
|
||||
{"_id":"L5RCoreKat000024","name":"Rushing Avalanche Style","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"2","bought_at_rank":0,"ring":"earth","technique_type":"kata","xp_cost":"3","description":"","book_reference":"Core Rulebook p.180"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/kata.svg","effects":[]}
|
||||
{"_id":"L5RCoreKat000025","name":"Iron Forest Style","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"2","bought_at_rank":0,"ring":"void","technique_type":"kata","xp_cost":"3","description":"","book_reference":"Core Rulebook p.180"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/kata.svg","effects":[]}
|
||||
{"_id":"L5RCoreKat000026","name":"Open-Hand Style","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"2","bought_at_rank":0,"ring":"void","technique_type":"kata","xp_cost":"3","description":"","book_reference":"Core Rulebook p.180"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/kata.svg","effects":[]}
|
||||
{"_id":"L5RCoreKat000027","name":"Veiled Menace Style","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"2","bought_at_rank":0,"ring":"void","technique_type":"kata","xp_cost":"3","description":"","book_reference":"Core Rulebook p.181"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/kata.svg","effects":[]}
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
{"_id":"L5RCoreMas000030","name":"Sensing the Breeze","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"6","bought_at_rank":0,"ring":"void","technique_type":"mastery_ability","xp_cost":"0","description":"","book_reference":"Core Rulebook p.86"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/clans/unicorn.svg","effects":[]}
|
||||
{"_id":"L5RCoreMas000031","name":"A Bottomless Ocean","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"6","bought_at_rank":0,"ring":"void","technique_type":"mastery_ability","xp_cost":"0","description":"","book_reference":"Core Rulebook p.87"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/clans/ronin.svg","effects":[]}
|
||||
{"_id":"L5RCoreMas000032","name":"Experimental Concotion","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"6","bought_at_rank":0,"ring":"void","technique_type":"mastery_ability","xp_cost":"0","description":"","book_reference":"Celestial Realms p.80"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/clans/dragon.svg","effects":[]}
|
||||
{"_id":"L5RCoreMas000033","name":"Favored ounselor","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"6","bought_at_rank":0,"ring":"void","technique_type":"mastery_ability","xp_cost":"0","description":"","book_reference":"Celestial Realms p.81"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/clans/crane.svg","effects":[]}
|
||||
{"_id":"L5RCoreMas000033","name":"Favored Counselor","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"6","bought_at_rank":0,"ring":"void","technique_type":"mastery_ability","xp_cost":"0","description":"","book_reference":"Celestial Realms p.81"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/clans/crane.svg","effects":[]}
|
||||
{"_id":"L5RCoreMas000034","name":"Essence of Emptiness","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"6","bought_at_rank":0,"ring":"void","technique_type":"mastery_ability","xp_cost":"0","description":"","book_reference":"Celestial Realms p.82"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/clans/phoenix.svg","effects":[]}
|
||||
{"_id":"L5RCoreMas000035","name":"Temple of the Heart","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"6","bought_at_rank":0,"ring":"void","technique_type":"mastery_ability","xp_cost":"0","description":"","book_reference":"Celestial Realms p.83"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/clans/phoenix.svg","effects":[]}
|
||||
{"_id":"L5RCoreMas000036","name":"The Flower Binds the Room","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"6","bought_at_rank":0,"ring":"void","technique_type":"mastery_ability","xp_cost":"0","description":"","book_reference":"Celestial Realms p.84"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/clans/crab.svg","effects":[]}
|
||||
@@ -77,3 +77,4 @@
|
||||
{"_id":"L5RCoreMas000077","name":"Empathic Transfer","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"6","bought_at_rank":0,"ring":"void","technique_type":"mastery_ability","xp_cost":"0","description":"","book_reference":"Shadowlands p.93"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/clans/unicorn.svg","effects":[]}
|
||||
{"_id":"L5RCoreMas000078","name":"Yotogi's Piercing Gaze","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"6","bought_at_rank":0,"ring":"void","technique_type":"mastery_ability","xp_cost":"0","description":"","book_reference":"Shadowlands p.94"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/technique.svg","effects":[]}
|
||||
{"_id":"L5RCoreMas000079","name":"Kingdom of Paper and Ink","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"6","bought_at_rank":0,"ring":"void","technique_type":"mastery_ability","xp_cost":"0","description":"","book_reference":"Shadowlands p.95"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/clans/scorpion.svg","effects":[]}
|
||||
{"_id":"L5RCoreMas000080","name":"Storm Lord’s Gambit","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"6","bought_at_rank":0,"ring":"void","technique_type":"mastery_ability","xp_cost":"0","description":"","book_reference":"Mantis Clan p.5"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/clans/mantis.svg","effects":[]}
|
||||
|
||||
@@ -77,3 +77,4 @@
|
||||
{"_id":"L5RCoreSch000077","name":"Hands of Earth and Sky","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"1","bought_at_rank":0,"ring":"void","technique_type":"school_ability","xp_cost":"0","description":"","book_reference":"Shadowlands p.93"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/clans/unicorn.svg","effects":[]}
|
||||
{"_id":"L5RCoreSch000078","name":"Eyes of Yotogi","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"1","bought_at_rank":0,"ring":"void","technique_type":"school_ability","xp_cost":"0","description":"","book_reference":"Shadowlands p.94"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/technique.svg","effects":[]}
|
||||
{"_id":"L5RCoreSch000079","name":"Warded Shikigami","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"1","bought_at_rank":0,"ring":"void","technique_type":"school_ability","xp_cost":"0","description":"","book_reference":"Shadowlands p.95"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/clans/scorpion.svg","effects":[]}
|
||||
{"_id":"L5RCoreSch000080","name":"Sailor’s Fortune","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"1","bought_at_rank":0,"ring":"void","technique_type":"school_ability","xp_cost":"0","description":"","book_reference":"Mantis Clan p.5"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/clans/mantis.svg","effects":[]}
|
||||
|
||||
@@ -32,14 +32,14 @@
|
||||
{"_id":"L5RCoreShu000032","name":"Regal Bearing","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"4","bought_at_rank":0,"ring":"water","technique_type":"shuji","xp_cost":"3","description":"","book_reference":"Core Rulebook p.220"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/shuji.svg","effects":[]}
|
||||
{"_id":"L5RCoreShu000033","name":"Well of Desire","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"1","bought_at_rank":0,"ring":"water","technique_type":"shuji","xp_cost":"3","description":"","book_reference":"Core Rulebook p.221"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/shuji.svg","effects":[]}
|
||||
{"_id":"L5RCoreShu000034","name":"Shallow Waters","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"1","bought_at_rank":0,"ring":"water","technique_type":"shuji","xp_cost":"3","description":"","book_reference":"Core Rulebook p.220"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/shuji.svg","effects":[]}
|
||||
{"_id":"L5RCoreShu000035","name":"Lady Shinjo’s Speed (Unicorn)","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"2","bought_at_rank":0,"ring":"void","technique_type":"shuji","xp_cost":"3","description":"","book_reference":"Core Rulebook p.222"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/shuji.svg","effects":[]}
|
||||
{"_id":"L5RCoreShu000036","name":"Lady Doji’s Decree (Crane)","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"2","bought_at_rank":0,"ring":"void","technique_type":"shuji","xp_cost":"3","description":"","book_reference":"Core Rulebook p.222"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/shuji.svg","effects":[]}
|
||||
{"_id":"L5RCoreShu000035","name":"Lady Shinjo’s Speed (Unicorn)","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"2","bought_at_rank":0,"ring":"void","technique_type":"shuji","xp_cost":"3","description":"","book_reference":"Core Rulebook p.222"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/clans/unicorn.svg","effects":[]}
|
||||
{"_id":"L5RCoreShu000036","name":"Lady Doji’s Decree (Crane)","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"2","bought_at_rank":0,"ring":"void","technique_type":"shuji","xp_cost":"3","description":"","book_reference":"Core Rulebook p.222"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/clans/crane.svg","effects":[]}
|
||||
{"_id":"L5RCoreShu000037","name":"Courtier’s Resolve","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"1","bought_at_rank":0,"ring":"void","technique_type":"shuji","xp_cost":"3","description":"","book_reference":"Core Rulebook p.222"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/shuji.svg","effects":[]}
|
||||
{"_id":"L5RCoreShu000038","name":"A Samurai’s Fate","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"4","bought_at_rank":0,"ring":"void","technique_type":"shuji","xp_cost":"3","description":"","book_reference":"Core Rulebook p.222"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/shuji.svg","effects":[]}
|
||||
{"_id":"L5RCoreShu000039","name":"Lord Bayushi’s Whispers (Scorpion)","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"2","bought_at_rank":0,"ring":"void","technique_type":"shuji","xp_cost":"3","description":"","book_reference":"Core Rulebook p.223"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/shuji.svg","effects":[]}
|
||||
{"_id":"L5RCoreShu000040","name":"Lord Togashi’s Insight (Dragon)","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"2","bought_at_rank":0,"ring":"void","technique_type":"shuji","xp_cost":"3","description":"","book_reference":"Core Rulebook p.223"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/shuji.svg","effects":[]}
|
||||
{"_id":"L5RCoreShu000039","name":"Lord Bayushi’s Whispers (Scorpion)","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"2","bought_at_rank":0,"ring":"void","technique_type":"shuji","xp_cost":"3","description":"","book_reference":"Core Rulebook p.223"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/clans/scorpion.svg","effects":[]}
|
||||
{"_id":"L5RCoreShu000040","name":"Lord Togashi’s Insight (Dragon)","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"2","bought_at_rank":0,"ring":"void","technique_type":"shuji","xp_cost":"3","description":"","book_reference":"Core Rulebook p.223"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/clans/dragon.svg","effects":[]}
|
||||
{"_id":"L5RCoreShu000041","name":"Rouse the Soul","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"5","bought_at_rank":0,"ring":"void","technique_type":"shuji","xp_cost":"3","description":"","book_reference":"Core Rulebook p.223"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/shuji.svg","effects":[]}
|
||||
{"_id":"L5RCoreShu000042","name":"Lord Akodo’s Roar (Lion)","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"2","bought_at_rank":0,"ring":"void","technique_type":"shuji","xp_cost":"3","description":"","book_reference":"Core Rulebook p.223"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/shuji.svg","effects":[]}
|
||||
{"_id":"L5RCoreShu000042","name":"Lord Akodo’s Roar (Lion)","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"2","bought_at_rank":0,"ring":"void","technique_type":"shuji","xp_cost":"3","description":"","book_reference":"Core Rulebook p.223"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/clans/lion.svg","effects":[]}
|
||||
{"_id":"L5RCoreShu000043","name":"All Arts Are One","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"3","bought_at_rank":0,"ring":"void","technique_type":"shuji","xp_cost":"3","description":"","book_reference":"Core Rulebook p.222"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/shuji.svg","effects":[]}
|
||||
{"_id":"L5RCoreShu000044","name":"Hidden in Smoke","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"4","bought_at_rank":0,"ring":"air","technique_type":"shuji","xp_cost":"3","description":"","book_reference":"Court of Stones p.117"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/shuji.svg","effects":[]}
|
||||
{"_id":"L5RCoreShu000045","name":"Assess Strengths","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"1","bought_at_rank":0,"ring":"air","technique_type":"shuji","xp_cost":"3","description":"","book_reference":"Court of Stones p.117"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/shuji.svg","effects":[]}
|
||||
@@ -52,7 +52,7 @@
|
||||
{"_id":"L5RCoreShu000052","name":"Fun and Games","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"1","bought_at_rank":0,"ring":"water","technique_type":"shuji","xp_cost":"3","description":"","book_reference":"Court of Stones p.119"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/shuji.svg","effects":[]}
|
||||
{"_id":"L5RCoreShu000053","name":"Foreseen Need","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"4","bought_at_rank":0,"ring":"void","technique_type":"shuji","xp_cost":"3","description":"","book_reference":"Court of Stones p.119"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/shuji.svg","effects":[]}
|
||||
{"_id":"L5RCoreShu000054","name":"Spin the Web (Kolat)","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"3","bought_at_rank":0,"ring":"air","technique_type":"shuji","xp_cost":"3","description":"","book_reference":"Emerald Empire p.248"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/shuji.svg","effects":[]}
|
||||
{"_id":"L5RCoreShu000055","name":"Awe of Heaven (Imperial)","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"4","bought_at_rank":0,"ring":"void","technique_type":"shuji","xp_cost":"3","description":"","book_reference":"Emerald Empire p.248"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/shuji.svg","effects":[]}
|
||||
{"_id":"L5RCoreShu000055","name":"Awe of Heaven (Imperial)","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"4","bought_at_rank":0,"ring":"void","technique_type":"shuji","xp_cost":"3","description":"","book_reference":"Emerald Empire p.248"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/clans/imperial.svg","effects":[]}
|
||||
{"_id":"L5RCoreShu000056","name":"Look Out","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"3","bought_at_rank":0,"ring":"earth","technique_type":"shuji","xp_cost":"3","description":"","book_reference":"Path of Waves p.92"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/shuji.svg","effects":[]}
|
||||
{"_id":"L5RCoreShu000057","name":"Bellow of Resolve","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"1","bought_at_rank":0,"ring":"earth","technique_type":"shuji","xp_cost":"3","description":"","book_reference":"Path of Waves p.92"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/shuji.svg","effects":[]}
|
||||
{"_id":"L5RCoreShu000058","name":"Ruse of the Moon's Reflection","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"5","bought_at_rank":0,"ring":"air","technique_type":"shuji","xp_cost":"3","description":"","book_reference":"Path of Waves p.93"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/shuji.svg","effects":[]}
|
||||
@@ -68,3 +68,4 @@
|
||||
{"_id":"L5RCoreShu000068","name":"Tonight, I Am Your Opponent","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"3","bought_at_rank":0,"ring":"void","technique_type":"shuji","xp_cost":"3","description":"","book_reference":"Path of Waves p.95"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/shuji.svg","effects":[]}
|
||||
{"_id":"L5RCoreShu000069","name":"Wanderer's Resolve","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"1","bought_at_rank":0,"ring":"void","technique_type":"shuji","xp_cost":"3","description":"","book_reference":"Path of Waves p.95"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/shuji.svg","effects":[]}
|
||||
{"_id":"L5RCoreShu000070","name":"Roar of Encouragement","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"5","bought_at_rank":0,"ring":"fire","technique_type":"shuji","xp_cost":"3","description":"","book_reference":"Path of Waves p.95"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/shuji.svg","effects":[]}
|
||||
{"_id":"L5RCoreShu000071","name":"Osano-wo’s Boast (Mantis)","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"3","bought_at_rank":0,"ring":"fire","technique_type":"shuji","xp_cost":"3","description":"","book_reference":"Mantis Clan p.7"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/clans/mantis.svg","effects":[]}
|
||||
|
||||
10
system/packs/core-titles.db
Normal file
10
system/packs/core-titles.db
Normal file
@@ -0,0 +1,10 @@
|
||||
{"_id":"L5RCoreTit000001","name":"Emerald Magistrate","permission":{"default":0},"type":"title","data":{"in_curriculum":false,"xp_used":0,"rank":1,"bought_at_rank":0,"ring":"void","xp_cost":"30","description":"","book_reference":"Core Rulebook p.305"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/title.svg","effects":[]}
|
||||
{"_id":"L5RCoreTit000002","name":"Castellan","permission":{"default":0},"type":"title","data":{"in_curriculum":false,"xp_used":0,"rank":1,"bought_at_rank":0,"ring":"void","xp_cost":"20","description":"","book_reference":"Court of Stones p.128"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/title.svg","effects":[]}
|
||||
{"_id":"L5RCoreTit000003","name":"Covert Agent","permission":{"default":0},"type":"title","data":{"in_curriculum":false,"xp_used":0,"rank":1,"bought_at_rank":0,"ring":"void","xp_cost":"20","description":"","book_reference":"Court of Stones p.128"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/title.svg","effects":[]}
|
||||
{"_id":"L5RCoreTit000004","name":"Dreaded Enforcer","permission":{"default":0},"type":"title","data":{"in_curriculum":false,"xp_used":0,"rank":1,"bought_at_rank":0,"ring":"void","xp_cost":"40","description":"","book_reference":"Court of Stones p.129"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/title.svg","effects":[]}
|
||||
{"_id":"L5RCoreTit000005","name":"Esteemed Negotiator","permission":{"default":0},"type":"title","data":{"in_curriculum":false,"xp_used":0,"rank":1,"bought_at_rank":0,"ring":"void","xp_cost":"34","description":"","book_reference":"Court of Stones p.129"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/title.svg","effects":[]}
|
||||
{"_id":"L5RCoreTit000006","name":"Kenshinzen","permission":{"default":0},"type":"title","data":{"in_curriculum":false,"xp_used":0,"rank":1,"bought_at_rank":0,"ring":"void","xp_cost":"24","description":"","book_reference":"Court of Stones p.130"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/title.svg","effects":[]}
|
||||
{"_id":"L5RCoreTit000007","name":"Kyuden Asako Shieldbearer","permission":{"default":0},"type":"title","data":{"in_curriculum":false,"xp_used":0,"rank":1,"bought_at_rank":0,"ring":"void","xp_cost":"40","description":"","book_reference":"Court of Stones p.130"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/title.svg","effects":[]}
|
||||
{"_id":"L5RCoreTit000008","name":"Master Artisan","permission":{"default":0},"type":"title","data":{"in_curriculum":false,"xp_used":0,"rank":1,"bought_at_rank":0,"ring":"void","xp_cost":"60","description":"","book_reference":"Court of Stones p.130"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/title.svg","effects":[]}
|
||||
{"_id":"L5RCoreTit000009","name":"Winter Court Champion","permission":{"default":0},"type":"title","data":{"in_curriculum":false,"xp_used":0,"rank":1,"bought_at_rank":0,"ring":"void","xp_cost":"16","description":"","book_reference":"Court of Stones p.131"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/title.svg","effects":[]}
|
||||
{"_id":"L5RCoreTit000010","name":"Seven fold Palace Acolyte","permission":{"default":0},"type":"title","data":{"in_curriculum":false,"xp_used":0,"rank":1,"bought_at_rank":0,"ring":"void","xp_cost":"36","description":"","book_reference":"Court of Stones p.131"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/title.svg","effects":[]}
|
||||
@@ -35,7 +35,7 @@
|
||||
{"_id":"L5RCoreWea000035","name":"Shuriken","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"6","zeni":"1 koku","properties":[{"id":"L5RCorePro000005","name":"Concealable"}],"category":"Specialist Weapons","skill":"unarmed","readied":false,"range":"","damage":"2","deadliness":"4","grip_1":"(thrown) Martial Arts (Ranged), Range 1-3","grip_2":"","description":"","book_reference":"Core Rulebook p.237"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/kusarigama.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000036","name":"Punch","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"0","zeni":"0","properties":[{"id":"L5RCorePro000007","name":"Snaring"}],"category":"Unarmed profiles","skill":"unarmed","readied":false,"range":"","damage":"1","deadliness":"2","grip_1":"","grip_2":"","description":"","book_reference":"Core Rulebook p.237"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/unarmed.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000037","name":"Kick","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"0","zeni":"0","properties":[],"category":"Unarmed profiles","skill":"unarmed","readied":false,"range":"1","damage":"2","deadliness":"1","grip_1":"","grip_2":"","description":"","book_reference":"Core Rulebook p.237"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/unarmed.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000038","name":"BIte","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"0","zeni":"0","properties":[],"category":"Unarmed profiles","skill":"unarmed","readied":false,"range":"","damage":"","deadliness":"3","grip_1":"","grip_2":"","description":"","book_reference":"Core Rulebook p.237"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/unarmed.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000038","name":"Bite","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"0","zeni":"0","properties":[],"category":"Unarmed profiles","skill":"unarmed","readied":false,"range":"","damage":"","deadliness":"3","grip_1":"","grip_2":"","description":"","book_reference":"Core Rulebook p.237"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/unarmed.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000039","name":"Tachi","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"2","rarity":"8","zeni":"25 koku","properties":[{"id":"L5RCorePro000002","name":"Ceremonial"},{"id":"L5RCorePro000006","name":"Cumbersome"},{"id":"L5RCorePro000001","name":"Razor-Edged"}],"category":"Swords","skill":"melee","readied":false,"range":"1","damage":"5","deadliness":"5","grip_1":"","grip_2":"Deadliness +1","description":"","book_reference":"Celestial Realms p.98"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/katana.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000040","name":"Whip","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"2","zeni":"4 bu","properties":[{"id":"L5RCorePro000012","name":"Mundane"},{"id":"L5RCorePro000007","name":"Snaring"}],"category":"Specialist Weapons","skill":"melee","readied":false,"range":"2","damage":"3","deadliness":"2","grip_1":"","grip_2":"","description":"","book_reference":"Celestial Realms p.98"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/kusarigama.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000041","name":"Moshi Sun Ax","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"2","rarity":"8","zeni":"20 koku","properties":[{"id":"L5RCorePro000002","name":"Ceremonial"},{"id":"L5RCorePro000006","name":"Cumbersome"},{"id":"L5RCorePro000010","name":"Resplendent"}],"category":"Axes","skill":"melee","readied":false,"range":"1-2","damage":"3","deadliness":"5","grip_1":"","grip_2":"Damage +3","description":"","book_reference":"Celestial Realms p.98"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/axe.svg","effects":[]}
|
||||
@@ -79,3 +79,9 @@
|
||||
{"_id":"L5RCoreWea000079","name":"Kabutowari","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"7","zeni":"6 koku","properties":[{"id":"L5RCorePro000015","name":"Durable"},{"id":"L5RCorePro000007","name":"Snaring"}],"category":"Swords","skill":"melee","readied":false,"range":"0-1","damage":"3","deadliness":"3","grip_1":"","grip_2":"","description":"","book_reference":"Shadowlands p.104"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/katana.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000080","name":"Storm Bow","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"2","rarity":"9","zeni":"60 koku","properties":[{"id":"L5RCorePro000006","name":"Cumbersome"},{"id":"L5RCorePro000013","name":"Prepare"},{"id":"L5RCorePro000011","name":"Wargear"}],"category":"Bows","skill":"ranged","readied":false,"range":"1-4","damage":"4","deadliness":"3","grip_1":"","grip_2":"","description":"","book_reference":"Shadowlands p.104"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/bow.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000081","name":"Doom Crossbow","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"2","rarity":"10","zeni":"80 koku","properties":[{"id":"L5RCorePro000006","name":"Cumbersome"},{"id":"L5RCorePro000013","name":"Prepare"},{"id":"L5RCorePro000011","name":"Wargear"}],"category":"Crossbows","skill":"ranged","readied":false,"range":"3-5","damage":"8","deadliness":"6","grip_1":"","grip_2":"","description":"","book_reference":"Shadowlands p.104"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/crossbow.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000082","name":"Butterfly sword","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"6","zeni":"10 koku","properties":[{"id":"L5RCorePro000005","name":"Concealable"},{"id":"L5RCorePro000007","name":"Snaring"}],"category":"Swords","skill":"melee","readied":false,"range":"0-1","damage":"3","deadliness":"5","grip_1":"","grip_2":"","description":"","book_reference":"Mantis Clan p.8"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/katana.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000083","name":"Eku","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"2","rarity":"5","zeni":"3 koku","properties":[{"id":"L5RCorePro000006","name":"Cumbersome"},{"id":"L5RCorePro000012","name":"Mundane"},{"id":"L5RCorePro000015","name":"Durable"}],"category":"Polearms","skill":"melee","readied":false,"range":"2","damage":"6","deadliness":"4","grip_1":"","grip_2":"","description":"","book_reference":"Mantis Clan p.8"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/bo.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000084","name":"Tinbe-Rochin","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"6","zeni":"15 koku","properties":[],"category":"Polearms","skill":"melee","readied":false,"range":"0-1","damage":"3","deadliness":"5","grip_1":"","grip_2":"","description":"","book_reference":"Mantis Clan p.8"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/bo.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000085","name":"Sai","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"6","zeni":"2 koku","properties":[{"id":"L5RCorePro000005","name":"Concealable"},{"id":"L5RCorePro000007","name":"Snaring"}],"category":"Hand Weapons","skill":"melee","readied":false,"range":"","damage":"2","deadliness":"2","grip_1":"","grip_2":"","description":"","book_reference":"Mantis Clan p.8"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/knife.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000086","name":"Tonfa","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"5","zeni":"4 koku","properties":[{"id":"L5RCorePro000005","name":"Concealable"},{"id":"L5RCorePro000015","name":"Durable"}],"category":"Hand Weapons","skill":"melee","readied":false,"range":"0-1","damage":"3","deadliness":"3","grip_1":"","grip_2":"","description":"","book_reference":"Mantis Clan p.9"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/knife.svg","effects":[]}
|
||||
{"_id":"L5RCoreWea000087","name":"Tinbe","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"6","zeni":"25 koku","properties":[{"id":"L5RCorePro000015","name":"Durable"}],"category":"Shields","skill":"melee","readied":false,"range":"","damage":"2","deadliness":"2","grip_1":"","grip_2":"","description":"","book_reference":"Mantis Clan p.8"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/unarmed.svg","effects":[]}
|
||||
|
||||
@@ -12,13 +12,15 @@ export class ActorL5r5e extends Actor {
|
||||
// }
|
||||
|
||||
// Replace default image
|
||||
data.img = `${CONFIG.l5r5e.paths.assets}icons/actors/${data.type}.svg`;
|
||||
if (data.img === undefined) {
|
||||
data.img = `${CONFIG.l5r5e.paths.assets}icons/actors/${data.type}.svg`;
|
||||
}
|
||||
|
||||
// Some tweak on actors token
|
||||
data.token = data.token || {};
|
||||
switch (data.type) {
|
||||
case "character":
|
||||
mergeObject(
|
||||
foundry.utils.mergeObject(
|
||||
data.token,
|
||||
{
|
||||
// vision: true,
|
||||
@@ -38,7 +40,7 @@ export class ActorL5r5e extends Actor {
|
||||
break;
|
||||
|
||||
case "npc":
|
||||
mergeObject(
|
||||
foundry.utils.mergeObject(
|
||||
data.token,
|
||||
{
|
||||
actorLink: false,
|
||||
@@ -61,12 +63,20 @@ export class ActorL5r5e extends Actor {
|
||||
* Entity-specific actions that should occur when the Entity is updated
|
||||
* @override
|
||||
*/
|
||||
update(data, options = {}) {
|
||||
async update(data = {}, context = {}) {
|
||||
// Need a _id
|
||||
if (!data["_id"]) {
|
||||
data["_id"] = this.id;
|
||||
}
|
||||
|
||||
// Fix for token image unliked from character... dunno why
|
||||
if (data.img) {
|
||||
data["token.img"] = data.img;
|
||||
}
|
||||
return super.update(data, options);
|
||||
|
||||
// Now using updateDocuments
|
||||
data = data instanceof Array ? data : [data];
|
||||
return Actor.updateDocuments(data, context);
|
||||
}
|
||||
|
||||
/** @override */
|
||||
@@ -98,4 +108,65 @@ export class ActorL5r5e extends Actor {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a Ring/Skill point to the current actor if the item is a advancement
|
||||
* @param {Item} item
|
||||
* @return {Promise<void>}
|
||||
*/
|
||||
async addBonus(item) {
|
||||
return this._updateActorFromAdvancement(item, true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove a Ring/Skill point to the current actor if the item is a advancement
|
||||
* @param {Item} item
|
||||
* @return {Promise<void>}
|
||||
*/
|
||||
async removeBonus(item) {
|
||||
return this._updateActorFromAdvancement(item, false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Alter Actor skill/ring from a advancement
|
||||
* @param {Item} item
|
||||
* @param {boolean} isAdd True=add, false=remove
|
||||
* @return {Promise<void>}
|
||||
* @private
|
||||
*/
|
||||
async _updateActorFromAdvancement(item, isAdd) {
|
||||
if (item && item.type === "advancement") {
|
||||
const actor = foundry.utils.duplicate(this.data.data);
|
||||
const itemData = item.data.data;
|
||||
if (itemData.advancement_type === "ring") {
|
||||
// Ring
|
||||
if (isAdd) {
|
||||
actor.rings[itemData.ring] = Math.min(9, actor.rings[itemData.ring] + 1);
|
||||
} else {
|
||||
actor.rings[itemData.ring] = Math.max(1, actor.rings[itemData.ring] - 1);
|
||||
}
|
||||
} else {
|
||||
// Skill
|
||||
const skillCatId = CONFIG.l5r5e.skills.get(itemData.skill);
|
||||
if (skillCatId) {
|
||||
if (isAdd) {
|
||||
actor.skills[skillCatId][itemData.skill] = Math.min(
|
||||
9,
|
||||
actor.skills[skillCatId][itemData.skill] + 1
|
||||
);
|
||||
} else {
|
||||
actor.skills[skillCatId][itemData.skill] = Math.max(
|
||||
0,
|
||||
actor.skills[skillCatId][itemData.skill] - 1
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Update Actor
|
||||
await this.update({
|
||||
data: foundry.utils.diffObject(this.data.data, actor),
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,20 +16,107 @@ export class BaseSheetL5r5e extends ActorSheet {
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Commons datas
|
||||
* @override
|
||||
*/
|
||||
getData() {
|
||||
const sheetData = super.getData();
|
||||
/** @inheritdoc */
|
||||
getData(options = {}) {
|
||||
const sheetData = super.getData(options);
|
||||
|
||||
sheetData.data.dtypes = ["String", "Number", "Boolean"];
|
||||
sheetData.data.stances = CONFIG.l5r5e.stances;
|
||||
sheetData.data.techniquesList = CONFIG.l5r5e.techniques;
|
||||
sheetData.data.techniquesList = game.l5r5e.HelpersL5r5e.getTechniquesList({ displayInTypes: true });
|
||||
|
||||
// Sort Items by name
|
||||
sheetData.items.sort((a, b) => {
|
||||
return a.name.localeCompare(b.name);
|
||||
});
|
||||
|
||||
// Split Techniques by types
|
||||
sheetData.data.splitTechniquesList = this._splitTechniques(sheetData);
|
||||
|
||||
// Split Items by types
|
||||
sheetData.data.splitItemsList = this._splitItems(sheetData);
|
||||
|
||||
return sheetData;
|
||||
}
|
||||
|
||||
/**
|
||||
* Split Techniques by types for better readability
|
||||
* @private
|
||||
*/
|
||||
_splitTechniques(sheetData) {
|
||||
const out = {};
|
||||
const schoolTechniques = Array.from(CONFIG.l5r5e.techniques)
|
||||
.filter(([id, cfg]) => cfg.type === "school")
|
||||
.map(([id, cfg]) => id);
|
||||
|
||||
// Build the list order
|
||||
Array.from(CONFIG.l5r5e.techniques)
|
||||
.filter(([id, cfg]) => cfg.type !== "custom" || game.settings.get("l5r5e", "techniques-customs"))
|
||||
.forEach(([id, cfg]) => {
|
||||
out[id] = [];
|
||||
});
|
||||
|
||||
// Add tech the character knows
|
||||
sheetData.items.forEach((item) => {
|
||||
switch (item.type) {
|
||||
case "technique":
|
||||
out[item.data.technique_type].push(item);
|
||||
break;
|
||||
|
||||
case "title":
|
||||
// Embed technique in titles
|
||||
Array.from(item.data.items).forEach(([id, embedItem]) => {
|
||||
if (embedItem.data.type === "technique") {
|
||||
out[embedItem.data.data.technique_type].push(embedItem.data);
|
||||
}
|
||||
});
|
||||
|
||||
// If unlocked, add the "title_ability" as technique (or always displayed for npc)
|
||||
if (item.data.xp_used >= item.data.xp_cost || this.document.type === "npc") {
|
||||
out["title_ability"].push(item);
|
||||
}
|
||||
break;
|
||||
} //swi
|
||||
});
|
||||
|
||||
// Remove unused techs
|
||||
Object.keys(out).forEach((tech) => {
|
||||
if (out[tech].length < 1 && !sheetData.data.data.techniques[tech] && !schoolTechniques.includes(tech)) {
|
||||
delete out[tech];
|
||||
}
|
||||
});
|
||||
|
||||
// Manage school add button
|
||||
sheetData.data.data.techniques["school_ability"] = out["school_ability"].length === 0;
|
||||
sheetData.data.data.techniques["mastery_ability"] = out["mastery_ability"].length === 0;
|
||||
|
||||
// Always display "school_ability", but display a empty "mastery_ability" field only if rank >= 5
|
||||
if (sheetData.data.data.identity?.school_rank < 5 && out["mastery_ability"].length === 0) {
|
||||
delete out["mastery_ability"];
|
||||
}
|
||||
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Split Items by types for better readability
|
||||
* @private
|
||||
*/
|
||||
_splitItems(sheetData) {
|
||||
const out = {
|
||||
weapon: [],
|
||||
armor: [],
|
||||
item: [],
|
||||
};
|
||||
|
||||
sheetData.items.forEach((item) => {
|
||||
if (["item", "armor", "weapon"].includes(item.type)) {
|
||||
out[item.type].push(item);
|
||||
}
|
||||
});
|
||||
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return a light sheet if in "limited" state
|
||||
* @override
|
||||
@@ -49,7 +136,7 @@ export class BaseSheetL5r5e extends ActorSheet {
|
||||
* @override
|
||||
*/
|
||||
activateEditor(name, options = {}, initialContent = "") {
|
||||
if (name === "data.notes.value" && initialContent) {
|
||||
if (["data.notes", "data.description"].includes(name) && initialContent) {
|
||||
initialContent = game.l5r5e.HelpersL5r5e.convertSymbols(initialContent, false);
|
||||
}
|
||||
super.activateEditor(name, options, initialContent);
|
||||
@@ -63,14 +150,18 @@ export class BaseSheetL5r5e extends ActorSheet {
|
||||
* @override
|
||||
*/
|
||||
async _updateObject(event, formData) {
|
||||
if (formData["data.notes.value"]) {
|
||||
formData["data.notes.value"] = game.l5r5e.HelpersL5r5e.convertSymbols(formData["data.notes.value"], true);
|
||||
if (formData["data.notes"]) {
|
||||
formData["data.notes"] = game.l5r5e.HelpersL5r5e.convertSymbols(formData["data.notes"], true);
|
||||
}
|
||||
if (formData["data.description"]) {
|
||||
formData["data.description"] = game.l5r5e.HelpersL5r5e.convertSymbols(formData["data.description"], true);
|
||||
}
|
||||
return super._updateObject(event, formData);
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle dropped data on the Actor sheet
|
||||
* @param {DragEvent} event
|
||||
*/
|
||||
async _onDrop(event) {
|
||||
// *** Everything below here is only needed if the sheet is editable ***
|
||||
@@ -79,41 +170,80 @@ export class BaseSheetL5r5e extends ActorSheet {
|
||||
}
|
||||
|
||||
// Check item type and subtype
|
||||
const item = await game.l5r5e.HelpersL5r5e.getDragnDropTargetObject(event);
|
||||
if (
|
||||
!item ||
|
||||
item.entity !== "Item" ||
|
||||
!["item", "armor", "weapon", "technique", "peculiarity", "advancement"].includes(item.data.type)
|
||||
) {
|
||||
let item = await game.l5r5e.HelpersL5r5e.getDragnDropTargetObject(event);
|
||||
if (!item || item.documentName !== "Item" || item.data.type === "property") {
|
||||
return;
|
||||
}
|
||||
|
||||
// Dropped a item with same "id" as one owned, add qte instead
|
||||
if (item.data.data.quantity && this.actor.data.items) {
|
||||
const tmpItem = this.actor.data.items.find((e) => e.name === item.name && e.type === item.type);
|
||||
if (tmpItem && this._modifyQuantity(tmpItem._id, 1)) {
|
||||
// Dropped a item with same "id" as one owned
|
||||
if (this.actor.data.items) {
|
||||
// Exit if we already owned exactly this id (drag a personal item on our own sheet)
|
||||
if (
|
||||
this.actor.data.items.some((embedItem) => {
|
||||
// Search in children
|
||||
if (embedItem.items?.has(item.data._id)) {
|
||||
return true;
|
||||
}
|
||||
return embedItem.data._id === item.data._id;
|
||||
})
|
||||
) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Add quantity instead if they have (id is different so use type and name)
|
||||
if (item.data.data.quantity) {
|
||||
const tmpItem = this.actor.data.items.find(
|
||||
(embedItem) => embedItem.name === item.data.name && embedItem.type === item.data.type
|
||||
);
|
||||
if (tmpItem && this._modifyQuantity(tmpItem.id, 1)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Item subtype specific
|
||||
switch (item.data.type) {
|
||||
case "advancement": // no break
|
||||
case "peculiarity":
|
||||
case "bond": // no break
|
||||
case "peculiarity": // no break
|
||||
case "item_pattern": // no break
|
||||
case "signature_scroll":
|
||||
// Modify the bought at rank to the current actor rank
|
||||
if (this.actor.data.data.identity?.school_rank) {
|
||||
item.data.data.bought_at_rank = this.actor.data.data.identity.school_rank;
|
||||
}
|
||||
break;
|
||||
|
||||
case "advancement":
|
||||
// Modify the bought at rank to the current actor rank
|
||||
if (this.actor.data.data.identity?.school_rank) {
|
||||
item.data.data.bought_at_rank = this.actor.data.data.identity.school_rank;
|
||||
}
|
||||
|
||||
// Specific advancements, remove 1 to selected ring/skill
|
||||
await this.actor.addBonus(item);
|
||||
break;
|
||||
|
||||
case "title":
|
||||
// Generate new Ids for the embed items
|
||||
await item.generateNewIdsForAllEmbedItems();
|
||||
|
||||
// Add embed advancements bonus
|
||||
for (let [embedId, embedItem] of item.data.data.items) {
|
||||
if (embedItem.data.type === "advancement") {
|
||||
await this.actor.addBonus(embedItem);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case "technique":
|
||||
// School_ability and mastery_ability, allow only 1 per type
|
||||
if (CONFIG.l5r5e.techniques_school.includes(item.data.data.technique_type)) {
|
||||
if (CONFIG.l5r5e.techniques.get(item.data.data.technique_type)?.type === "school") {
|
||||
if (
|
||||
Array.from(this.actor.items).some(
|
||||
(e) =>
|
||||
Array.from(this.actor.items).some((e) => {
|
||||
return (
|
||||
e.type === "technique" && e.data.data.technique_type === item.data.data.technique_type
|
||||
)
|
||||
);
|
||||
})
|
||||
) {
|
||||
ui.notifications.info(game.i18n.localize("l5r5e.techniques.only_one"));
|
||||
return;
|
||||
@@ -148,24 +278,19 @@ export class BaseSheetL5r5e extends ActorSheet {
|
||||
if (allowed === false) {
|
||||
return;
|
||||
}
|
||||
return this._onDropItem(event, item);
|
||||
|
||||
return this._onDropItemCreate(item.data.toJSON());
|
||||
}
|
||||
|
||||
/**
|
||||
* Subscribe to events from the sheet.
|
||||
* @param html HTML content of the sheet.
|
||||
* @param {jQuery} html HTML content of the sheet.
|
||||
*/
|
||||
activateListeners(html) {
|
||||
super.activateListeners(html);
|
||||
|
||||
// Toggle
|
||||
html.find(".toggle-on-click").on("click", (event) => {
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
const elmt = $(event.currentTarget).data("toggle");
|
||||
const tgt = html.find("." + elmt);
|
||||
tgt.toggleClass("toggle-active");
|
||||
});
|
||||
// Commons
|
||||
game.l5r5e.HelpersL5r5e.commonListeners(html);
|
||||
|
||||
// *** Everything below here is only needed if the sheet is editable ***
|
||||
if (!this.options.editable) {
|
||||
@@ -185,6 +310,7 @@ export class BaseSheetL5r5e extends ActorSheet {
|
||||
}
|
||||
|
||||
new game.l5r5e.DicePickerDialog({
|
||||
ringId: li.data("ring") || null,
|
||||
skillId: skillId,
|
||||
skillCatId: li.data("skillcat") || null,
|
||||
isInitiativeRoll: li.data("initiative") || false,
|
||||
@@ -207,28 +333,15 @@ export class BaseSheetL5r5e extends ActorSheet {
|
||||
});
|
||||
|
||||
// Equipped / Readied
|
||||
html.find(".equip-readied-control").on("click", (event) => {
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
this._switchEquipReadied(event);
|
||||
});
|
||||
html.find(".equip-readied-control").on("click", this._switchEquipReadied.bind(this));
|
||||
|
||||
// *** Items : add, edit, delete ***
|
||||
html.find(".item-add").on("click", (event) => {
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
this._addSubItem(event);
|
||||
});
|
||||
html.find(`.item-edit`).on("click", (event) => {
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
this._editSubItem(event);
|
||||
});
|
||||
html.find(`.item-delete`).on("click", (event) => {
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
this._deleteSubItem(event);
|
||||
});
|
||||
html.find(".item-add").on("click", this._addSubItem.bind(this));
|
||||
html.find(`.item-edit`).on("click", this._editSubItem.bind(this));
|
||||
html.find(`.item-delete`).on("click", this._deleteSubItem.bind(this));
|
||||
|
||||
// Others Advancements
|
||||
html.find(".item-advancement-choose").on("click", this._showDialogAddSubItem.bind(this));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -247,88 +360,188 @@ export class BaseSheetL5r5e extends ActorSheet {
|
||||
|
||||
/**
|
||||
* Add a generic item with sub type
|
||||
* @param {string} type Item sub type (armor, weapon, bond...)
|
||||
* @param {boolean} isEquipped For item with prop "Equipped" set the value
|
||||
* @param {string|null} techniqueType Technique subtype (kata, shuji...)
|
||||
* @return {Promise<void>}
|
||||
* @private
|
||||
*/
|
||||
async _addSubItem(event) {
|
||||
const type = $(event.currentTarget).data("item-type");
|
||||
const titles = {
|
||||
item: "l5r5e.items.title_new",
|
||||
armor: "l5r5e.armors.title_new",
|
||||
weapon: "l5r5e.weapons.title_new",
|
||||
technique: "l5r5e.techniques.title_new",
|
||||
peculiarity: "l5r5e.peculiarities.title_new",
|
||||
advancement: "l5r5e.advancements.title_new",
|
||||
};
|
||||
const created = await this.actor.createEmbeddedEntity("OwnedItem", {
|
||||
name: game.i18n.localize(titles[type]),
|
||||
type: type,
|
||||
img: "icons/svg/mystery-man.svg",
|
||||
});
|
||||
const item = this.actor.getOwnedItem(created._id);
|
||||
async _createSubItem({ type, isEquipped = false, techniqueType = null }) {
|
||||
if (!type) {
|
||||
return;
|
||||
}
|
||||
|
||||
// assign current school rank to the new adv/tech
|
||||
if (this.actor.data.data.identity?.school_rank && ["advancement", "technique"].includes(item.data.type)) {
|
||||
item.data.data.rank = this.actor.data.data.identity.school_rank;
|
||||
const created = await this.actor.createEmbeddedDocuments("Item", [
|
||||
{
|
||||
name: game.i18n.localize(`ITEM.Type${type.capitalize()}`),
|
||||
type: type,
|
||||
img: `${CONFIG.l5r5e.paths.assets}icons/items/${type}.svg`,
|
||||
},
|
||||
]);
|
||||
if (created?.length < 1) {
|
||||
return;
|
||||
}
|
||||
const item = this.actor.items.get(created[0].id);
|
||||
|
||||
// Assign current school rank to the new adv/tech
|
||||
if (this.actor.data.data.identity?.school_rank) {
|
||||
item.data.data.bought_at_rank = this.actor.data.data.identity.school_rank;
|
||||
if (["advancement", "technique"].includes(item.data.type)) {
|
||||
item.data.data.rank = this.actor.data.data.identity.school_rank;
|
||||
}
|
||||
}
|
||||
|
||||
switch (item.data.type) {
|
||||
case "item": // no break
|
||||
case "armor": // no break
|
||||
case "weapon":
|
||||
item.data.data.equipped = isEquipped;
|
||||
break;
|
||||
|
||||
case "technique": {
|
||||
// If technique, select the current sub-type
|
||||
if (CONFIG.l5r5e.techniques.get(techniqueType)) {
|
||||
item.data.name = game.i18n.localize(`l5r5e.techniques.${techniqueType}`);
|
||||
item.data.img = `${CONFIG.l5r5e.paths.assets}icons/techs/${techniqueType}.svg`;
|
||||
item.data.data.technique_type = techniqueType;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
item.sheet.render(true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Display a dialog to choose what Item to add
|
||||
* @param {Event} event
|
||||
* @return {Promise<void>}
|
||||
* @private
|
||||
*/
|
||||
async _showDialogAddSubItem(event) {
|
||||
game.l5r5e.HelpersL5r5e.showSubItemDialog(["bond", "title", "signature_scroll", "item_pattern"]).then(
|
||||
(selectedType) => {
|
||||
this._createSubItem({ type: selectedType });
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a generic item with sub type
|
||||
* @param {Event} event
|
||||
* @private
|
||||
*/
|
||||
async _addSubItem(event) {
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
|
||||
const type = $(event.currentTarget).data("item-type");
|
||||
if (!type) {
|
||||
return;
|
||||
}
|
||||
|
||||
const isEquipped = $(event.currentTarget).data("item-equipped") || false;
|
||||
const techniqueType = $(event.currentTarget).data("tech-type") || null;
|
||||
|
||||
return this._createSubItem({ type, isEquipped, techniqueType });
|
||||
}
|
||||
|
||||
/**
|
||||
* Edit a generic item with sub type
|
||||
* @param {Event} event
|
||||
* @private
|
||||
*/
|
||||
_editSubItem(event) {
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
|
||||
let item;
|
||||
const itemId = $(event.currentTarget).data("item-id");
|
||||
const item = this.actor.getOwnedItem(itemId);
|
||||
if (!itemId) {
|
||||
return;
|
||||
}
|
||||
|
||||
const itemParentId = $(event.currentTarget).data("item-parent-id");
|
||||
if (itemParentId) {
|
||||
// Embed Item
|
||||
const parentItem = this.actor.items.get(itemParentId);
|
||||
if (!parentItem) {
|
||||
return;
|
||||
}
|
||||
item = parentItem.items.get(itemId);
|
||||
} else {
|
||||
// Regular item
|
||||
item = this.actor.items.get(itemId);
|
||||
}
|
||||
|
||||
if (!item) {
|
||||
return;
|
||||
}
|
||||
item.sheet.render(true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a generic item with sub type
|
||||
* @param {Event} event
|
||||
* @private
|
||||
*/
|
||||
_deleteSubItem(event) {
|
||||
const itemId = $(event.currentTarget).data("item-id");
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
|
||||
// Remove 1 qty if possible
|
||||
const tmpItem = this.actor.getOwnedItem(itemId);
|
||||
if (tmpItem && tmpItem.data.data.quantity > 1 && this._modifyQuantity(tmpItem._id, -1)) {
|
||||
const itemId = $(event.currentTarget).data("item-id");
|
||||
if (!itemId) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Specific advancements, remove 1 to selected ring/skill
|
||||
if (tmpItem.type === "advancement") {
|
||||
const actor = duplicate(this.actor.data.data);
|
||||
const itmData = tmpItem.data.data;
|
||||
if (itmData.advancement_type === "ring") {
|
||||
// Ring
|
||||
actor.rings[itmData.ring] = Math.max(1, actor.rings[itmData.ring] - 1);
|
||||
} else {
|
||||
// Skill
|
||||
const skillCatId = CONFIG.l5r5e.skills.get(itmData.skill);
|
||||
if (skillCatId) {
|
||||
actor.skills[skillCatId][itmData.skill] = Math.max(0, actor.skills[skillCatId][itmData.skill] - 1);
|
||||
}
|
||||
}
|
||||
|
||||
// Update Actor
|
||||
this.actor.update({
|
||||
data: diffObject(this.actor.data.data, actor),
|
||||
});
|
||||
const tmpItem = this.actor.items.get(itemId);
|
||||
if (!tmpItem) {
|
||||
return;
|
||||
}
|
||||
|
||||
return this.actor.deleteOwnedItem(itemId);
|
||||
// Remove 1 qty if possible
|
||||
if (tmpItem.data.data.quantity > 1 && this._modifyQuantity(tmpItem.id, -1)) {
|
||||
return;
|
||||
}
|
||||
|
||||
const callback = async () => {
|
||||
switch (tmpItem.type) {
|
||||
case "advancement":
|
||||
// Remove advancements bonus (1 to selected ring/skill)
|
||||
await this.actor.removeBonus(tmpItem);
|
||||
break;
|
||||
|
||||
case "title":
|
||||
// Remove embed advancements bonus
|
||||
for (let [embedId, embedItem] of tmpItem.data.data.items) {
|
||||
if (embedItem.data.type === "advancement") {
|
||||
await this.actor.removeBonus(embedItem);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
return this.actor.deleteEmbeddedDocuments("Item", [itemId]);
|
||||
};
|
||||
|
||||
// Holing Ctrl = without confirm
|
||||
if (event.ctrlKey) {
|
||||
return callback();
|
||||
}
|
||||
|
||||
game.l5r5e.HelpersL5r5e.confirmDeleteDialog(
|
||||
game.i18n.format("l5r5e.global.delete_confirm", { name: tmpItem.name }),
|
||||
callback
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Switch "in_curriculum"
|
||||
* @param {Event} event
|
||||
* @private
|
||||
*/
|
||||
_switchSubItemCurriculum(event) {
|
||||
const itemId = $(event.currentTarget).data("item-id");
|
||||
const item = this.actor.getOwnedItem(itemId);
|
||||
const item = this.actor.items.get(itemId);
|
||||
if (item.type !== "item") {
|
||||
item.update({
|
||||
data: {
|
||||
@@ -343,7 +556,7 @@ export class BaseSheetL5r5e extends ActorSheet {
|
||||
* @private
|
||||
*/
|
||||
_modifyQuantity(itemId, add) {
|
||||
const tmpItem = this.actor.getOwnedItem(itemId);
|
||||
const tmpItem = this.actor.items.get(itemId);
|
||||
if (tmpItem) {
|
||||
tmpItem.data.data.quantity = Math.max(1, tmpItem.data.data.quantity + add);
|
||||
tmpItem.update({
|
||||
@@ -358,16 +571,20 @@ export class BaseSheetL5r5e extends ActorSheet {
|
||||
|
||||
/**
|
||||
* Switch Readied state on a weapon
|
||||
* @param {Event} event
|
||||
* @private
|
||||
*/
|
||||
_switchEquipReadied(event) {
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
|
||||
const type = $(event.currentTarget).data("type");
|
||||
if (!["equipped", "readied"].includes(type)) {
|
||||
return;
|
||||
}
|
||||
|
||||
const itemId = $(event.currentTarget).data("item-id");
|
||||
const tmpItem = this.actor.getOwnedItem(itemId);
|
||||
const tmpItem = this.actor.items.get(itemId);
|
||||
if (!tmpItem || tmpItem.data.data[type] === undefined) {
|
||||
return;
|
||||
}
|
||||
@@ -389,7 +606,7 @@ export class BaseSheetL5r5e extends ActorSheet {
|
||||
* @private
|
||||
*/
|
||||
_getWeaponSkillId(weaponId) {
|
||||
const item = this.actor.getOwnedItem(weaponId);
|
||||
const item = this.actor.items.get(weaponId);
|
||||
if (!!item && item.type === "weapon") {
|
||||
return item.data.data.skill;
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@ import { TwentyQuestionsDialog } from "./twenty-questions-dialog.js";
|
||||
*/
|
||||
export class CharacterSheetL5r5e extends BaseSheetL5r5e {
|
||||
static get defaultOptions() {
|
||||
return mergeObject(super.defaultOptions, {
|
||||
return foundry.utils.mergeObject(super.defaultOptions, {
|
||||
classes: ["l5r5e", "sheet", "actor"],
|
||||
template: CONFIG.l5r5e.paths.templates + "actors/character-sheet.html",
|
||||
tabs: [
|
||||
@@ -47,23 +47,25 @@ export class CharacterSheetL5r5e extends BaseSheetL5r5e {
|
||||
this.actor.data.data.identity.school_rank = Math.max(1, this.actor.data.data.identity.school_rank);
|
||||
|
||||
// Split Money
|
||||
sheetData.data.money = this._zeniToMoney(this.actor.data.data.zeni);
|
||||
sheetData.data.data.money = this._zeniToMoney(this.actor.data.data.zeni);
|
||||
|
||||
// Sort Items by name
|
||||
sheetData.items.sort((a, b) => {
|
||||
return a.name.localeCompare(b.name);
|
||||
});
|
||||
// Split school advancements by rank, and calculate xp spent and add it to total
|
||||
this._prepareSchoolAdvancement(sheetData);
|
||||
|
||||
// split advancements list by rank, and calculate xp spent
|
||||
this._prepareAdvancement(sheetData);
|
||||
sheetData.data.xp_saved = Math.floor(parseInt(sheetData.data.xp_total) - parseInt(sheetData.data.xp_spent));
|
||||
// Split Others advancements, and calculate xp spent and add it to total
|
||||
this._prepareOthersAdvancement(sheetData);
|
||||
|
||||
// Total
|
||||
sheetData.data.data.xp_saved = Math.floor(
|
||||
parseInt(sheetData.data.data.xp_total) - parseInt(sheetData.data.data.xp_spent)
|
||||
);
|
||||
|
||||
return sheetData;
|
||||
}
|
||||
|
||||
/**
|
||||
* Subscribe to events from the sheet.
|
||||
* @param html HTML content of the sheet.
|
||||
* @param {jQuery} html HTML content of the sheet.
|
||||
*/
|
||||
activateListeners(html) {
|
||||
super.activateListeners(html);
|
||||
@@ -101,37 +103,56 @@ export class CharacterSheetL5r5e extends BaseSheetL5r5e {
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the total xp spent and the current total xp spent for this rank
|
||||
* Split the school advancement, calculate the total xp spent and the current total xp spent by rank
|
||||
*/
|
||||
_prepareAdvancement(sheetData) {
|
||||
_prepareSchoolAdvancement(sheetData) {
|
||||
const adv = [];
|
||||
sheetData.data.xp_spent = 0;
|
||||
sheetData.items.forEach((item) => {
|
||||
if (!["peculiarity", "technique", "advancement"].includes(item.type)) {
|
||||
return;
|
||||
}
|
||||
sheetData.data.data.xp_spent = 0;
|
||||
sheetData.items
|
||||
.filter((item) => ["peculiarity", "technique", "advancement"].includes(item.type))
|
||||
.forEach((item) => {
|
||||
const { xp_used_total, xp_used } = game.l5r5e.HelpersL5r5e.getItemsXpCost(item);
|
||||
sheetData.data.data.xp_spent += xp_used_total;
|
||||
|
||||
let xp = parseInt(item.data.xp_used) || 0;
|
||||
sheetData.data.xp_spent = parseInt(sheetData.data.xp_spent) + xp;
|
||||
const rank = Math.max(0, item.data.bought_at_rank);
|
||||
if (!adv[rank]) {
|
||||
adv[rank] = {
|
||||
rank: rank,
|
||||
spent: {
|
||||
total: 0,
|
||||
curriculum: 0,
|
||||
},
|
||||
goal: CONFIG.l5r5e.xp.costPerRank[rank] || null,
|
||||
list: [],
|
||||
};
|
||||
}
|
||||
adv[rank].list.push(item);
|
||||
adv[rank].spent.total += xp_used_total;
|
||||
adv[rank].spent.curriculum += xp_used;
|
||||
});
|
||||
sheetData.data.advancementsListByRank = adv;
|
||||
}
|
||||
|
||||
// if not in curriculum, xp spent /2 for this item
|
||||
if (!item.data.in_curriculum && xp > 0) {
|
||||
xp = Math.ceil(xp / 2);
|
||||
}
|
||||
/**
|
||||
* Prepare Bonds, Item Pattern, Signature Scroll and get xp spend
|
||||
*/
|
||||
_prepareOthersAdvancement(sheetData) {
|
||||
// Split OthersAdvancement from items
|
||||
sheetData.data.advancementsOthers = sheetData.items.filter((item) =>
|
||||
["bond", "item_pattern", "title", "signature_scroll"].includes(item.type)
|
||||
);
|
||||
|
||||
const rank = Math.max(0, item.data.bought_at_rank);
|
||||
if (!adv[rank]) {
|
||||
adv[rank] = {
|
||||
rank: rank,
|
||||
spent: 0,
|
||||
goal: CONFIG.l5r5e.xp.costPerRank[rank] || null,
|
||||
list: [],
|
||||
};
|
||||
}
|
||||
adv[rank].list.push(item);
|
||||
adv[rank].spent = adv[rank].spent + xp;
|
||||
});
|
||||
sheetData.advancementsListByRank = adv;
|
||||
// Sort by rank desc
|
||||
sheetData.data.advancementsOthers.sort((a, b) => (b.data.rank || 0) - (a.data.rank || 0));
|
||||
|
||||
// Total xp spent in curriculum & total
|
||||
sheetData.data.advancementsOthersTotalXp = sheetData.data.advancementsOthers.reduce(
|
||||
(acc, item) => acc + parseInt(item.data.xp_used_total || item.data.xp_used || 0),
|
||||
0
|
||||
);
|
||||
|
||||
// Update the total spent
|
||||
sheetData.data.data.xp_spent += sheetData.data.advancementsOthersTotalXp;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -155,6 +176,12 @@ export class CharacterSheetL5r5e extends BaseSheetL5r5e {
|
||||
return super._updateObject(event, formData);
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert a sum in Zeni to Zeni, Bu and Koku
|
||||
* @param {number} zeni
|
||||
* @return {{bu: number, koku: number, zeni: number}}
|
||||
* @private
|
||||
*/
|
||||
_zeniToMoney(zeni) {
|
||||
const money = {
|
||||
koku: 0,
|
||||
@@ -174,6 +201,14 @@ export class CharacterSheetL5r5e extends BaseSheetL5r5e {
|
||||
return money;
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert a sum in Zeni, Bu and Koku to Zeni
|
||||
* @param {number} koku
|
||||
* @param {number} bu
|
||||
* @param {number} zeni
|
||||
* @return {number}
|
||||
* @private
|
||||
*/
|
||||
_moneyToZeni(koku, bu, zeni) {
|
||||
return Math.floor(koku * CONFIG.l5r5e.money[0]) + Math.floor(bu * CONFIG.l5r5e.money[1]) + Math.floor(zeni);
|
||||
}
|
||||
|
||||
@@ -10,16 +10,18 @@ export class NpcSheetL5r5e extends BaseSheetL5r5e {
|
||||
static types = ["adversary", "minion"];
|
||||
|
||||
static get defaultOptions() {
|
||||
return mergeObject(super.defaultOptions, {
|
||||
return foundry.utils.mergeObject(super.defaultOptions, {
|
||||
classes: ["l5r5e", "sheet", "npc"],
|
||||
template: CONFIG.l5r5e.paths.templates + "actors/npc-sheet.html",
|
||||
});
|
||||
}
|
||||
|
||||
getData() {
|
||||
/** @inheritdoc */
|
||||
getData(options = {}) {
|
||||
const sheetData = super.getData();
|
||||
|
||||
sheetData.data.types = NpcSheetL5r5e.types.map((e) => ({
|
||||
// NPC Subtypes
|
||||
sheetData.data.data.types = NpcSheetL5r5e.types.map((e) => ({
|
||||
id: e,
|
||||
label: game.i18n.localize("l5r5e.character_types." + e),
|
||||
}));
|
||||
|
||||
@@ -32,7 +32,7 @@ export class TwentyQuestionsDialog extends FormApplication {
|
||||
* @override
|
||||
*/
|
||||
static get defaultOptions() {
|
||||
return mergeObject(super.defaultOptions, {
|
||||
return foundry.utils.mergeObject(super.defaultOptions, {
|
||||
id: "l5r5e-twenty-questions-dialog",
|
||||
classes: ["l5r5e", "twenty-questions-dialog"],
|
||||
template: CONFIG.l5r5e.paths.templates + "actors/twenty-questions-dialog.html",
|
||||
@@ -51,7 +51,7 @@ export class TwentyQuestionsDialog extends FormApplication {
|
||||
* Define a unique and dynamic element ID for the rendered ActorSheet application
|
||||
*/
|
||||
get id() {
|
||||
return `l5r5e-twenty-questions-dialog-${this.actor._id}`;
|
||||
return `l5r5e-twenty-questions-dialog-${this.actor.id}`;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -69,7 +69,7 @@ export class TwentyQuestionsDialog extends FormApplication {
|
||||
if (!this.actor) {
|
||||
return;
|
||||
}
|
||||
this._initialize(game.actors.get(this.actor._id));
|
||||
this._initialize(game.actors.get(this.actor.id));
|
||||
await this._constructCache();
|
||||
this.render(false);
|
||||
}
|
||||
@@ -142,7 +142,7 @@ export class TwentyQuestionsDialog extends FormApplication {
|
||||
skillsListStep7,
|
||||
skillsListStep17,
|
||||
noHonorSkillsList: ["commerce", "skulduggery", "medicine", "seafaring", "survival", "labor"],
|
||||
techniquesList: CONFIG.l5r5e.techniques,
|
||||
techniquesList: game.l5r5e.HelpersL5r5e.getTechniquesList({ displayInTypes: true }),
|
||||
data: this.object.data,
|
||||
cache: this.cache,
|
||||
summary: {
|
||||
@@ -154,19 +154,14 @@ export class TwentyQuestionsDialog extends FormApplication {
|
||||
|
||||
/**
|
||||
* Listen to html elements
|
||||
* @param {jQuery} html HTML content of the sheet.
|
||||
* @override
|
||||
*/
|
||||
activateListeners(html) {
|
||||
super.activateListeners(html);
|
||||
|
||||
// Toggle
|
||||
html.find(".toggle-on-click").on("click", (event) => {
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
const elmt = $(event.currentTarget).data("toggle");
|
||||
const tgt = html.find("." + elmt);
|
||||
tgt.toggleClass("toggle-active");
|
||||
});
|
||||
// Commons
|
||||
game.l5r5e.HelpersL5r5e.commonListeners(html);
|
||||
|
||||
// BT Next
|
||||
html.find(".next").on("click", (event) => {
|
||||
@@ -208,6 +203,7 @@ export class TwentyQuestionsDialog extends FormApplication {
|
||||
html.find("#generate").on("click", async (event) => {
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
$(event.currentTarget).prop("disabled", true);
|
||||
await this.object.toActor(this.actor, flattenObject(this.cache));
|
||||
await this.close({ submit: true, force: true });
|
||||
});
|
||||
@@ -233,7 +229,7 @@ export class TwentyQuestionsDialog extends FormApplication {
|
||||
try {
|
||||
// Get item
|
||||
const item = await game.l5r5e.HelpersL5r5e.getDragnDropTargetObject(event);
|
||||
if (item.entity !== "Item" || !item) {
|
||||
if (item.documentName !== "Item" || !item) {
|
||||
console.warn("forbidden item for this drop zone", type, item.data.type);
|
||||
return;
|
||||
}
|
||||
@@ -335,7 +331,7 @@ export class TwentyQuestionsDialog extends FormApplication {
|
||||
|
||||
if (this.object.data.step13.advantage.length > 0) {
|
||||
formData["step13.skill"] = "none";
|
||||
setProperty(this.object.data, "step13.disadvantage", []);
|
||||
foundry.utils.setProperty(this.object.data, "step13.disadvantage", []);
|
||||
}
|
||||
|
||||
// Update 20Q object data
|
||||
@@ -365,14 +361,14 @@ export class TwentyQuestionsDialog extends FormApplication {
|
||||
this.cache = {};
|
||||
for (const stepName of TwentyQuestions.itemsList) {
|
||||
// Check if current step value is a array
|
||||
let step = getProperty(this.object.data, stepName);
|
||||
let step = foundry.utils.getProperty(this.object.data, stepName);
|
||||
if (!step || !Array.isArray(step)) {
|
||||
step = [];
|
||||
}
|
||||
|
||||
// Init cache if not exist
|
||||
if (!hasProperty(this.cache, stepName)) {
|
||||
setProperty(this.cache, stepName, []);
|
||||
if (!foundry.utils.hasProperty(this.cache, stepName)) {
|
||||
foundry.utils.setProperty(this.cache, stepName, []);
|
||||
}
|
||||
|
||||
// Get linked Item, and store it in cache (delete null value and old items)
|
||||
@@ -381,14 +377,14 @@ export class TwentyQuestionsDialog extends FormApplication {
|
||||
if (!id) {
|
||||
continue;
|
||||
}
|
||||
const item = await game.l5r5e.HelpersL5r5e.getObjectGameOrPack(id, "Item");
|
||||
const item = await game.l5r5e.HelpersL5r5e.getObjectGameOrPack({ id: id, type: "Item" });
|
||||
if (!item) {
|
||||
continue;
|
||||
}
|
||||
newStep.push(id);
|
||||
getProperty(this.cache, stepName).push(item);
|
||||
foundry.utils.getProperty(this.cache, stepName).push(item);
|
||||
}
|
||||
setProperty(this.object.data, stepName, newStep);
|
||||
foundry.utils.setProperty(this.object.data, stepName, newStep);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -401,7 +397,7 @@ export class TwentyQuestionsDialog extends FormApplication {
|
||||
roll.actor = this._actor;
|
||||
|
||||
await roll.roll();
|
||||
setProperty(this.object.data, stepName, roll.result);
|
||||
foundry.utils.setProperty(this.object.data, stepName, roll.result);
|
||||
return roll.toMessage({ flavor: flavor });
|
||||
}
|
||||
|
||||
@@ -411,7 +407,7 @@ export class TwentyQuestionsDialog extends FormApplication {
|
||||
*/
|
||||
_addOwnedItem(item, stepName) {
|
||||
// Add to Step (uniq id only)
|
||||
let step = getProperty(this.object.data, stepName);
|
||||
let step = foundry.utils.getProperty(this.object.data, stepName);
|
||||
if (!step) {
|
||||
step = [];
|
||||
}
|
||||
@@ -421,7 +417,7 @@ export class TwentyQuestionsDialog extends FormApplication {
|
||||
step.push(item.id);
|
||||
|
||||
// Add to cache
|
||||
getProperty(this.cache, stepName).push(item);
|
||||
foundry.utils.getProperty(this.cache, stepName).push(item);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -430,14 +426,14 @@ export class TwentyQuestionsDialog extends FormApplication {
|
||||
*/
|
||||
_deleteOwnedItem(stepName, itemId) {
|
||||
// Delete from current step
|
||||
let step = getProperty(this.object.data, stepName);
|
||||
let step = foundry.utils.getProperty(this.object.data, stepName);
|
||||
step = step.filter((e) => !!e && e !== itemId);
|
||||
setProperty(this.object.data, stepName, step);
|
||||
foundry.utils.setProperty(this.object.data, stepName, step);
|
||||
|
||||
// Delete from cache
|
||||
let cache = getProperty(this.cache, stepName);
|
||||
let cache = foundry.utils.getProperty(this.cache, stepName);
|
||||
cache = cache.filter((e) => !!e && e.id !== itemId);
|
||||
setProperty(this.cache, stepName, cache);
|
||||
foundry.utils.setProperty(this.cache, stepName, cache);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -445,7 +441,7 @@ export class TwentyQuestionsDialog extends FormApplication {
|
||||
* @private
|
||||
*/
|
||||
_getSkillZero(skillsList, skillsPoints, stepName) {
|
||||
const stepSkillId = getProperty(this.object.data, stepName);
|
||||
const stepSkillId = foundry.utils.getProperty(this.object.data, stepName);
|
||||
const out = {};
|
||||
Object.entries(skillsList).forEach(([cat, val]) => {
|
||||
out[cat] = val.filter(
|
||||
|
||||
@@ -82,6 +82,7 @@ export class TwentyQuestions {
|
||||
shuji: false,
|
||||
maho: false,
|
||||
ninjutsu: false,
|
||||
specificity: true,
|
||||
},
|
||||
techniques: [],
|
||||
school_ability: [],
|
||||
@@ -175,7 +176,7 @@ export class TwentyQuestions {
|
||||
* Update object with form data
|
||||
*/
|
||||
updateFromForm(formData) {
|
||||
this.data = mergeObject(this.data, expandObject(formData));
|
||||
this.data = foundry.utils.mergeObject(this.data, foundry.utils.expandObject(formData));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -266,7 +267,7 @@ export class TwentyQuestions {
|
||||
// Rings - Reset to 1, and apply modifiers
|
||||
CONFIG.l5r5e.stances.forEach((ring) => (actorDatas.rings[ring] = 1));
|
||||
TwentyQuestions.ringList.forEach((formName) => {
|
||||
const ring = getProperty(this.data, formName);
|
||||
const ring = foundry.utils.getProperty(this.data, formName);
|
||||
if (ring !== "none") {
|
||||
actorDatas.rings[ring] = actorDatas.rings[ring] + 1;
|
||||
}
|
||||
@@ -277,7 +278,7 @@ export class TwentyQuestions {
|
||||
actorDatas.skills[skillCat][skillId] = 0;
|
||||
});
|
||||
TwentyQuestions.skillList.forEach((formName) => {
|
||||
const skillId = getProperty(this.data, formName);
|
||||
const skillId = foundry.utils.getProperty(this.data, formName);
|
||||
const skillCat = CONFIG.l5r5e.skills.get(skillId);
|
||||
if (skillId !== "none") {
|
||||
actorDatas.skills[skillCat][skillId] = actorDatas.skills[skillCat][skillId] + 1;
|
||||
@@ -285,21 +286,27 @@ export class TwentyQuestions {
|
||||
});
|
||||
|
||||
// Clear and add items to actor
|
||||
const deleteIds = actor.data.items.map((e) => e._id);
|
||||
await actor.deleteEmbeddedEntity("OwnedItem", deleteIds);
|
||||
const deleteIds = actor.data.items.map((e) => e.id);
|
||||
if (deleteIds.length > 0) {
|
||||
await actor.deleteEmbeddedDocuments("Item", deleteIds);
|
||||
}
|
||||
|
||||
// Add items in 20Q to actor
|
||||
for (const types of Object.values(itemsCache)) {
|
||||
for (const item of types) {
|
||||
const itemData = duplicate(item.data);
|
||||
const newItemsData = [];
|
||||
Object.values(itemsCache).forEach((types) => {
|
||||
types.forEach((item) => {
|
||||
const itemData = foundry.utils.duplicate(item.data);
|
||||
if (itemData.data?.bought_at_rank) {
|
||||
itemData.data.bought_at_rank = 0;
|
||||
}
|
||||
if (itemData.data?.xp_spent) {
|
||||
itemData.data.xp_spent = 0;
|
||||
}
|
||||
await actor.createEmbeddedEntity("OwnedItem", itemData);
|
||||
}
|
||||
newItemsData.push(itemData);
|
||||
});
|
||||
});
|
||||
if (newItemsData.length > 0) {
|
||||
await actor.createEmbeddedDocuments("Item", newItemsData);
|
||||
}
|
||||
|
||||
// Update actor
|
||||
@@ -376,7 +383,7 @@ export class TwentyQuestions {
|
||||
summariesRingsOrSkills(listName) {
|
||||
const store = {};
|
||||
TwentyQuestions[listName].forEach((formName) => {
|
||||
const id = getProperty(this.data, formName);
|
||||
const id = foundry.utils.getProperty(this.data, formName);
|
||||
if (!id || id === "none") {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -24,25 +24,25 @@ export class CombatL5r5e extends Combat {
|
||||
|
||||
// Get global modifiers
|
||||
const cfg = {
|
||||
difficulty: game.settings.get("l5r5e", "initiative.difficulty.value"),
|
||||
difficultyHidden: game.settings.get("l5r5e", "initiative.difficulty.hidden"),
|
||||
difficulty: game.settings.get("l5r5e", "initiative-difficulty-value"),
|
||||
difficultyHidden: game.settings.get("l5r5e", "initiative-difficulty-hidden"),
|
||||
prepared: {
|
||||
character: game.settings.get("l5r5e", "initiative.prepared.character"),
|
||||
adversary: game.settings.get("l5r5e", "initiative.prepared.adversary"),
|
||||
minion: game.settings.get("l5r5e", "initiative.prepared.minion"),
|
||||
character: game.settings.get("l5r5e", "initiative-prepared-character"),
|
||||
adversary: game.settings.get("l5r5e", "initiative-prepared-adversary"),
|
||||
minion: game.settings.get("l5r5e", "initiative-prepared-minion"),
|
||||
},
|
||||
};
|
||||
|
||||
// SkillId from DicePicker or global
|
||||
const skillId = messageOptions.skillId
|
||||
? messageOptions.skillId
|
||||
: CONFIG.l5r5e.initiativeSkills[game.settings.get("l5r5e", "initiative.encounter")];
|
||||
: CONFIG.l5r5e.initiativeSkills[game.settings.get("l5r5e", "initiative-encounter")];
|
||||
const skillCat = CONFIG.l5r5e.skills.get(skillId);
|
||||
|
||||
// Get score for each combatant
|
||||
const updatedCombatants = [];
|
||||
ids.forEach((combatantId) => {
|
||||
const combatant = game.combat.combatants.find((c) => c._id === combatantId);
|
||||
for (const combatantId of ids) {
|
||||
const combatant = game.combat.combatants.find((c) => c.id === combatantId);
|
||||
|
||||
// Skip if combatant already have a initiative value
|
||||
if (!messageOptions.rerollInitiative && (!combatant || !combatant.actor)) {
|
||||
@@ -77,44 +77,60 @@ export class CombatL5r5e extends Combat {
|
||||
formula = createFormula.join("+");
|
||||
}
|
||||
|
||||
const roll = new game.l5r5e.RollL5r5e(formula);
|
||||
roll.actor = combatant.actor;
|
||||
roll.l5r5e.stance = data.stance;
|
||||
roll.l5r5e.skillId = skillId;
|
||||
roll.l5r5e.skillCatId = skillCat;
|
||||
roll.l5r5e.summary.difficulty =
|
||||
messageOptions.difficulty !== undefined ? messageOptions.difficulty : cfg.difficulty;
|
||||
roll.l5r5e.summary.difficultyHidden =
|
||||
messageOptions.difficultyHidden !== undefined
|
||||
? messageOptions.difficultyHidden
|
||||
: cfg.difficultyHidden;
|
||||
roll.l5r5e.summary.voidPointUsed = !!messageOptions.useVoidPoint;
|
||||
let roll;
|
||||
let rnkMessage;
|
||||
const flavor =
|
||||
game.i18n.localize("l5r5e.chatdices.initiative_roll") +
|
||||
" (" +
|
||||
game.i18n.localize(`l5r5e.conflict.initiative.prepared_${isPrepared}`) +
|
||||
")";
|
||||
|
||||
roll.roll();
|
||||
roll.toMessage({
|
||||
flavor:
|
||||
game.i18n.localize("l5r5e.chatdices.initiative_roll") +
|
||||
" (" +
|
||||
game.i18n.localize(`l5r5e.conflict.initiative.prepared_${isPrepared}`) +
|
||||
")",
|
||||
});
|
||||
if (messageOptions.rnkRoll instanceof game.l5r5e.RollL5r5e && ids.length === 1) {
|
||||
// Specific RnK
|
||||
roll = messageOptions.rnkRoll;
|
||||
rnkMessage = await roll.toMessage({ flavor });
|
||||
} else {
|
||||
// Regular
|
||||
roll = new game.l5r5e.RollL5r5e(formula);
|
||||
roll.actor = combatant.actor;
|
||||
roll.l5r5e.isInitiativeRoll = true;
|
||||
roll.l5r5e.stance = data.stance;
|
||||
roll.l5r5e.skillId = skillId;
|
||||
roll.l5r5e.skillCatId = skillCat;
|
||||
roll.l5r5e.difficulty =
|
||||
messageOptions.difficulty !== undefined ? messageOptions.difficulty : cfg.difficulty;
|
||||
roll.l5r5e.difficultyHidden =
|
||||
messageOptions.difficultyHidden !== undefined
|
||||
? messageOptions.difficultyHidden
|
||||
: cfg.difficultyHidden;
|
||||
roll.l5r5e.voidPointUsed = !!messageOptions.useVoidPoint;
|
||||
roll.l5r5e.skillAssistance = messageOptions.skillAssistance || 0;
|
||||
|
||||
roll.roll();
|
||||
rnkMessage = await roll.toMessage({ flavor });
|
||||
}
|
||||
|
||||
// Ugly but work... i need the new message
|
||||
if (ids.length === 1) {
|
||||
messageOptions.rnkMessage = rnkMessage;
|
||||
}
|
||||
|
||||
// if the character succeeded on their Initiative check, they add 1 to their base initiative value,
|
||||
// plus an additional amount equal to their bonus successes.
|
||||
const successes = Math.min(roll.l5r5e.summary.ringsUsed, roll.l5r5e.summary.success);
|
||||
if (successes >= roll.l5r5e.summary.difficulty) {
|
||||
initiative = initiative + 1 + Math.max(successes - roll.l5r5e.summary.difficulty, 0);
|
||||
const successes = roll.l5r5e.summary.totalSuccess;
|
||||
if (successes >= roll.l5r5e.difficulty) {
|
||||
initiative = initiative + 1 + Math.max(successes - roll.l5r5e.difficulty, 0);
|
||||
}
|
||||
}
|
||||
|
||||
updatedCombatants.push({
|
||||
_id: combatant._id,
|
||||
_id: combatant.id,
|
||||
initiative: initiative,
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// Update all combatants at once
|
||||
await this.updateEmbeddedEntity("Combatant", updatedCombatants);
|
||||
await this.updateEmbeddedDocuments("Combatant", updatedCombatants);
|
||||
return this;
|
||||
}
|
||||
|
||||
|
||||
@@ -7,11 +7,29 @@ L5R5E.paths = {
|
||||
|
||||
L5R5E.money = [50, 10];
|
||||
L5R5E.stances = ["earth", "air", "water", "fire", "void"];
|
||||
L5R5E.techniques = ["kata", "kiho", "inversion", "invocation", "ritual", "shuji", "maho", "ninjutsu"];
|
||||
L5R5E.techniques_school = ["school_ability", "mastery_ability"];
|
||||
|
||||
// *** Techniques ***
|
||||
L5R5E.techniques = new Map();
|
||||
// Core
|
||||
L5R5E.techniques.set("kata", { type: "core", displayInTypes: true });
|
||||
L5R5E.techniques.set("kiho", { type: "core", displayInTypes: true });
|
||||
L5R5E.techniques.set("inversion", { type: "core", displayInTypes: true });
|
||||
L5R5E.techniques.set("invocation", { type: "core", displayInTypes: true });
|
||||
L5R5E.techniques.set("ritual", { type: "core", displayInTypes: true });
|
||||
L5R5E.techniques.set("shuji", { type: "core", displayInTypes: true });
|
||||
L5R5E.techniques.set("maho", { type: "core", displayInTypes: true });
|
||||
L5R5E.techniques.set("ninjutsu", { type: "core", displayInTypes: true });
|
||||
// School
|
||||
L5R5E.techniques.set("school_ability", { type: "school", displayInTypes: false });
|
||||
L5R5E.techniques.set("mastery_ability", { type: "school", displayInTypes: false });
|
||||
// Title
|
||||
L5R5E.techniques.set("title_ability", { type: "title", displayInTypes: false });
|
||||
// Custom
|
||||
L5R5E.techniques.set("specificity", { type: "custom", displayInTypes: false });
|
||||
|
||||
L5R5E.xp = {
|
||||
costPerRank: [0, 20, 24, 32, 44, 60],
|
||||
bondCostPerRank: [0, 3, 4, 6, 8, 10],
|
||||
ringCostMultiplier: 3,
|
||||
skillCostMultiplier: 2,
|
||||
techniqueCost: 3,
|
||||
@@ -72,7 +90,8 @@ L5R5E.symbols.set("(void)", { class: "i_void", label: "l5r5e.rings.void" });
|
||||
|
||||
L5R5E.symbols.set("(kiho)", { class: "i_kiho", label: "l5r5e.techniques.kiho" });
|
||||
L5R5E.symbols.set("(maho)", { class: "i_maho", label: "l5r5e.techniques.maho" });
|
||||
L5R5E.symbols.set("(ninjitsu)", { class: "i_ninjitsu", label: "l5r5e.techniques.ninjutsu" });
|
||||
L5R5E.symbols.set("(ninjutsu)", { class: "i_ninjitsu", label: "l5r5e.techniques.ninjutsu" });
|
||||
L5R5E.symbols.set("(ninjitsu)", { class: "i_ninjitsu", label: "l5r5e.techniques.ninjutsu" }); // for compatibility
|
||||
L5R5E.symbols.set("(ritual)", { class: "i_rituals", label: "l5r5e.techniques.ritual" });
|
||||
L5R5E.symbols.set("(shuji)", { class: "i_shuji", label: "l5r5e.techniques.shuji" });
|
||||
L5R5E.symbols.set("(inversion)", { class: "i_inversion", label: "l5r5e.techniques.inversion" });
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* L5R Initiative Roll dialog
|
||||
* L5R GM Toolbox dialog
|
||||
* @extends {FormApplication}
|
||||
*/
|
||||
export class GmToolsDialog extends FormApplication {
|
||||
@@ -15,16 +15,13 @@ export class GmToolsDialog extends FormApplication {
|
||||
static get defaultOptions() {
|
||||
const x = $(window).width();
|
||||
const y = $(window).height();
|
||||
return mergeObject(super.defaultOptions, {
|
||||
return foundry.utils.mergeObject(super.defaultOptions, {
|
||||
id: "l5r5e-gm-tools-dialog",
|
||||
classes: ["l5r5e", "gm-tools-dialog"],
|
||||
template: CONFIG.l5r5e.paths.templates + "dice/gm-tools-dialog.html",
|
||||
title: game.i18n.localize("l5r5e.dicepicker.difficulty_title"),
|
||||
width: 200, // ignored under 200px
|
||||
height: 130, // ignored under 50px
|
||||
scale: 0.5, // so scale /2 :D
|
||||
left: x - 470,
|
||||
top: y - 94,
|
||||
template: CONFIG.l5r5e.paths.templates + "dialogs/gm-tools-dialog.html",
|
||||
title: game.i18n.localize("l5r5e.gm_toolbox.title"),
|
||||
left: x - 512,
|
||||
top: y - 98,
|
||||
closeOnSubmit: false,
|
||||
submitOnClose: false,
|
||||
submitOnChange: true,
|
||||
@@ -37,9 +34,28 @@ export class GmToolsDialog extends FormApplication {
|
||||
*/
|
||||
constructor(options = {}) {
|
||||
super(options);
|
||||
this._initialize();
|
||||
}
|
||||
|
||||
/**
|
||||
* Refresh data (used from socket)
|
||||
*/
|
||||
async refresh() {
|
||||
if (!game.user.isGM) {
|
||||
return;
|
||||
}
|
||||
this._initialize();
|
||||
this.render(false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize the values
|
||||
* @private
|
||||
*/
|
||||
_initialize() {
|
||||
this.object = {
|
||||
difficulty: game.settings.get("l5r5e", "initiative.difficulty.value"),
|
||||
difficultyHidden: game.settings.get("l5r5e", "initiative.difficulty.hidden"),
|
||||
difficulty: game.settings.get("l5r5e", "initiative-difficulty-value"),
|
||||
difficultyHidden: game.settings.get("l5r5e", "initiative-difficulty-hidden"),
|
||||
};
|
||||
}
|
||||
|
||||
@@ -47,9 +63,9 @@ export class GmToolsDialog extends FormApplication {
|
||||
* Do not close this dialog
|
||||
* @override
|
||||
*/
|
||||
close() {
|
||||
async close(options = {}) {
|
||||
// TODO better implementation needed : see KeyboardManager._onEscape(event, up, modifiers)
|
||||
// This windows is always open, so esc key si stuck at step 2 : Object.keys(ui.windows).length > 0
|
||||
// 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();
|
||||
@@ -67,6 +83,8 @@ export class GmToolsDialog extends FormApplication {
|
||||
if (!game.user.isGM) {
|
||||
return false;
|
||||
}
|
||||
this.position.width = "auto";
|
||||
this.position.height = "auto";
|
||||
return super.render(force, options);
|
||||
}
|
||||
|
||||
@@ -93,6 +111,7 @@ export class GmToolsDialog extends FormApplication {
|
||||
|
||||
/**
|
||||
* Listen to html elements
|
||||
* @param {jQuery} html HTML content of the sheet.
|
||||
* @override
|
||||
*/
|
||||
activateListeners(html) {
|
||||
@@ -104,9 +123,11 @@ export class GmToolsDialog extends FormApplication {
|
||||
|
||||
// Modify difficulty hidden
|
||||
html.find(`.difficulty_hidden`).on("click", (event) => {
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
this.object.difficultyHidden = !this.object.difficultyHidden;
|
||||
game.settings
|
||||
.set("l5r5e", "initiative.difficulty.hidden", this.object.difficultyHidden)
|
||||
.set("l5r5e", "initiative-difficulty-hidden", this.object.difficultyHidden)
|
||||
.then(() => this.submit());
|
||||
});
|
||||
|
||||
@@ -128,7 +149,14 @@ export class GmToolsDialog extends FormApplication {
|
||||
this.object.difficulty = Math.max(0, this.object.difficulty - 1);
|
||||
break;
|
||||
}
|
||||
game.settings.set("l5r5e", "initiative.difficulty.value", this.object.difficulty).then(() => this.submit());
|
||||
game.settings.set("l5r5e", "initiative-difficulty-value", this.object.difficulty).then(() => this.submit());
|
||||
});
|
||||
|
||||
// Scene End & Sleep
|
||||
html.find(`.gm_actor_updates`).on("click", (event) => {
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
this._updatesActors($(event.currentTarget).data("type"));
|
||||
});
|
||||
}
|
||||
|
||||
@@ -140,15 +168,54 @@ export class GmToolsDialog extends FormApplication {
|
||||
* @override
|
||||
*/
|
||||
async _updateObject(event, formData) {
|
||||
// Notify the change to other players if they already have opened the DicePicker
|
||||
game.l5r5e.sockets.refreshAppId("l5r5e-dice-picker-dialog");
|
||||
|
||||
// If the current GM also have the DP open
|
||||
const app = Object.values(ui.windows).find((e) => e.id === "l5r5e-dice-picker-dialog");
|
||||
if (app && typeof app.refresh === "function") {
|
||||
app.refresh();
|
||||
}
|
||||
|
||||
this.render(false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update all actors
|
||||
* @param {string} type
|
||||
* @private
|
||||
*/
|
||||
_updatesActors(type) {
|
||||
if (!game.user.isGM) {
|
||||
return;
|
||||
}
|
||||
|
||||
game.actors.contents.forEach((actor) => {
|
||||
switch (type) {
|
||||
case "sleep":
|
||||
// Remove 'water x2' fatigue points
|
||||
actor.data.data.fatigue.value = Math.max(
|
||||
0,
|
||||
actor.data.data.fatigue.value - Math.ceil(actor.data.data.rings.water * 2)
|
||||
);
|
||||
break;
|
||||
|
||||
case "scene_end":
|
||||
// If more than half the value => roundup half conflit & fatigue
|
||||
actor.data.data.fatigue.value = Math.min(
|
||||
actor.data.data.fatigue.value,
|
||||
Math.ceil(actor.data.data.fatigue.max / 2)
|
||||
);
|
||||
actor.data.data.strife.value = Math.min(
|
||||
actor.data.data.strife.value,
|
||||
Math.ceil(actor.data.data.strife.max / 2)
|
||||
);
|
||||
break;
|
||||
}
|
||||
|
||||
actor.update({
|
||||
data: {
|
||||
fatigue: {
|
||||
value: actor.data.data.fatigue.value,
|
||||
},
|
||||
strife: {
|
||||
value: actor.data.data.strife.value,
|
||||
},
|
||||
},
|
||||
});
|
||||
});
|
||||
|
||||
ui.notifications.info(game.i18n.localize(`l5r5e.gm_toolbox.${type}_info`));
|
||||
}
|
||||
}
|
||||
@@ -27,14 +27,15 @@ export class DicePickerDialog extends FormApplication {
|
||||
skill: {
|
||||
id: "",
|
||||
value: 0,
|
||||
default_value: 0,
|
||||
defaultValue: 0,
|
||||
cat: "",
|
||||
name: "",
|
||||
assistance: 0,
|
||||
},
|
||||
difficulty: {
|
||||
value: 2,
|
||||
hidden: false,
|
||||
add_void_point: false,
|
||||
addVoidPoint: false,
|
||||
},
|
||||
useVoidPoint: false,
|
||||
isInitiativeRoll: false,
|
||||
@@ -45,13 +46,11 @@ export class DicePickerDialog extends FormApplication {
|
||||
* @override
|
||||
*/
|
||||
static get defaultOptions() {
|
||||
return mergeObject(super.defaultOptions, {
|
||||
return foundry.utils.mergeObject(super.defaultOptions, {
|
||||
id: "l5r5e-dice-picker-dialog",
|
||||
classes: ["l5r5e", "dice-picker-dialog"],
|
||||
template: CONFIG.l5r5e.paths.templates + "dice/dice-picker-dialog.html",
|
||||
title: "L5R Dice Roller",
|
||||
width: 660,
|
||||
height: 460,
|
||||
actor: null,
|
||||
ringId: null,
|
||||
skillId: "",
|
||||
@@ -132,7 +131,7 @@ export class DicePickerDialog extends FormApplication {
|
||||
if (options.difficulty) {
|
||||
this.difficulty = options.difficulty;
|
||||
} else {
|
||||
this.difficulty = game.settings.get("l5r5e", "initiative.difficulty.value");
|
||||
this.difficulty = game.settings.get("l5r5e", "initiative-difficulty-value");
|
||||
}
|
||||
|
||||
// DifficultyHidden
|
||||
@@ -146,7 +145,7 @@ export class DicePickerDialog extends FormApplication {
|
||||
* Refresh data (used from socket)
|
||||
*/
|
||||
async refresh() {
|
||||
this.difficulty = game.settings.get("l5r5e", "initiative.difficulty.value");
|
||||
this.difficulty = game.settings.get("l5r5e", "initiative-difficulty-value");
|
||||
this.difficultyHidden = false;
|
||||
this.render(false);
|
||||
}
|
||||
@@ -156,7 +155,7 @@ export class DicePickerDialog extends FormApplication {
|
||||
* @param actor
|
||||
*/
|
||||
set actor(actor) {
|
||||
if (!actor || !(actor instanceof Actor) || !actor.owner) {
|
||||
if (!actor || !(actor instanceof Actor) || !actor.isOwner) {
|
||||
return;
|
||||
}
|
||||
this._actor = actor;
|
||||
@@ -184,6 +183,7 @@ export class DicePickerDialog extends FormApplication {
|
||||
}
|
||||
|
||||
this.object.skill = {
|
||||
...this.object.skill,
|
||||
id: skillId.toLowerCase().trim(),
|
||||
value: 0,
|
||||
cat: "",
|
||||
@@ -215,13 +215,13 @@ export class DicePickerDialog extends FormApplication {
|
||||
switch (this._actor.data.type) {
|
||||
case "character":
|
||||
this.object.skill.value = this._actor.data.data.skills[skillCatId]?.[this.object.skill.id] || 0;
|
||||
this.object.skill.default_value = this.object.skill.value;
|
||||
this.object.skill.defaultValue = this.object.skill.value;
|
||||
break;
|
||||
|
||||
case "npc":
|
||||
// Skill value is in categories for npc
|
||||
this.object.skill.value = this._actor.data.data.skills[skillCatId] || 0;
|
||||
this.object.skill.default_value = this.object.skill.value;
|
||||
this.object.skill.defaultValue = this.object.skill.value;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -244,12 +244,12 @@ export class DicePickerDialog extends FormApplication {
|
||||
*/
|
||||
set difficultyHidden(isHidden) {
|
||||
// If GM hide, then player choice don't matter
|
||||
this._difficultyHiddenIsLock = game.settings.get("l5r5e", "initiative.difficulty.hidden");
|
||||
this._difficultyHiddenIsLock = game.settings.get("l5r5e", "initiative-difficulty-hidden");
|
||||
if (this._difficultyHiddenIsLock) {
|
||||
isHidden = true;
|
||||
}
|
||||
this.object.difficulty.hidden = !!isHidden;
|
||||
this.object.difficulty.add_void_point = this.object.difficulty.hidden;
|
||||
this.object.difficulty.addVoidPoint = this.object.difficulty.hidden;
|
||||
this._updateVoidPointUsage();
|
||||
}
|
||||
|
||||
@@ -274,7 +274,7 @@ export class DicePickerDialog extends FormApplication {
|
||||
actor: this._actor,
|
||||
actorIsPc: !this._actor || this._actor.data?.type === "character",
|
||||
canUseVoidPoint:
|
||||
this.object.difficulty.add_void_point || !this._actor || this._actor.data.data.void_points.value > 0,
|
||||
this.object.difficulty.addVoidPoint || !this._actor || this._actor.data.data.void_points.value > 0,
|
||||
disableSubmit: this.object.skill.value < 1 && this.object.ring.value < 1,
|
||||
difficultyHiddenIsLock: this._difficultyHiddenIsLock,
|
||||
};
|
||||
@@ -300,6 +300,7 @@ export class DicePickerDialog extends FormApplication {
|
||||
|
||||
/**
|
||||
* Listen to html elements
|
||||
* @param {jQuery} html HTML content of the sheet.
|
||||
* @override
|
||||
*/
|
||||
activateListeners(html) {
|
||||
@@ -323,11 +324,27 @@ export class DicePickerDialog extends FormApplication {
|
||||
this.render(false);
|
||||
});
|
||||
|
||||
// Skill assistance
|
||||
html.find(".assistance").on("click", async (event) => {
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
const assistanceAdd = $(event.currentTarget).data("value");
|
||||
if (this.object.skill.assistance > 0 || assistanceAdd > 0) {
|
||||
this._quantityChange("skill", assistanceAdd);
|
||||
}
|
||||
this.object.skill.assistance = Math.max(
|
||||
Math.min(parseInt(this.object.skill.assistance) + assistanceAdd, 9),
|
||||
0
|
||||
);
|
||||
this.render(false);
|
||||
});
|
||||
|
||||
// Click on the Default Skill Dice
|
||||
html.find("#skill_default_value").on("click", async (event) => {
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
this.object.skill.value = this.object.skill.default_value;
|
||||
this.object.skill.value = this.object.skill.defaultValue;
|
||||
this.object.skill.assistance = 0;
|
||||
this.render(false);
|
||||
});
|
||||
|
||||
@@ -345,7 +362,7 @@ export class DicePickerDialog extends FormApplication {
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
this.object.difficulty.hidden = !this.object.difficulty.hidden;
|
||||
this.object.difficulty.add_void_point = this.object.difficulty.hidden;
|
||||
this.object.difficulty.addVoidPoint = this.object.difficulty.hidden;
|
||||
this._updateVoidPointUsage();
|
||||
this.render(false);
|
||||
});
|
||||
@@ -354,7 +371,7 @@ export class DicePickerDialog extends FormApplication {
|
||||
html.find("#diff_add_void_point").on("click", async (event) => {
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
this.object.difficulty.add_void_point = !this.object.difficulty.add_void_point;
|
||||
this.object.difficulty.addVoidPoint = !this.object.difficulty.addVoidPoint;
|
||||
this._updateVoidPointUsage();
|
||||
this.render(false);
|
||||
});
|
||||
@@ -374,7 +391,11 @@ export class DicePickerDialog extends FormApplication {
|
||||
|
||||
// If initiative roll, check if player already have
|
||||
if (this.object.isInitiativeRoll) {
|
||||
const combatant = game.combat.combatants.find((c) => c.actor._id === this._actor._id && c.initiative > 0);
|
||||
if (!game.combat) {
|
||||
ui.notifications.warn(game.i18n.localize("COMBAT.NoneActive"));
|
||||
return this.close();
|
||||
}
|
||||
const combatant = game.combat.combatants.find((c) => c.actor.id === this._actor.id && c.initiative > 0);
|
||||
if (combatant) {
|
||||
ui.notifications.error(game.i18n.localize("l5r5e.conflict.initiative.already_set"));
|
||||
return this.close();
|
||||
@@ -383,7 +404,7 @@ export class DicePickerDialog extends FormApplication {
|
||||
|
||||
// Update Actor
|
||||
if (this._actor) {
|
||||
const actorData = duplicate(this._actor.data.data);
|
||||
const actorData = foundry.utils.duplicate(this._actor.data.data);
|
||||
|
||||
// Update the actor stance on initiative only
|
||||
if (this.object.isInitiativeRoll) {
|
||||
@@ -391,7 +412,7 @@ export class DicePickerDialog extends FormApplication {
|
||||
}
|
||||
|
||||
// If hidden add 1 void pt
|
||||
if (this.object.difficulty.add_void_point) {
|
||||
if (this.object.difficulty.addVoidPoint) {
|
||||
actorData.void_points.value = Math.min(actorData.void_points.value + 1, actorData.void_points.max);
|
||||
}
|
||||
|
||||
@@ -400,10 +421,13 @@ export class DicePickerDialog extends FormApplication {
|
||||
actorData.void_points.value = Math.max(actorData.void_points.value - 1, 0);
|
||||
}
|
||||
|
||||
// Update actor
|
||||
await this._actor.update({
|
||||
data: diffObject(this._actor.data.data, actorData),
|
||||
});
|
||||
// Update actor if needed
|
||||
const updateDiff = foundry.utils.diffObject(this._actor.data.data, actorData);
|
||||
if (Object.keys(updateDiff).length > 0) {
|
||||
await this._actor.update({
|
||||
data: foundry.utils.diffObject(this._actor.data.data, actorData),
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// Build the formula
|
||||
@@ -415,20 +439,29 @@ export class DicePickerDialog extends FormApplication {
|
||||
formula.push(`${this.object.skill.value}ds`);
|
||||
}
|
||||
|
||||
let message;
|
||||
if (this.object.isInitiativeRoll) {
|
||||
// Initiative roll
|
||||
this._actor.rollInitiative({
|
||||
let msgOptions = {
|
||||
skillId: this.object.skill.id,
|
||||
difficulty: this.object.difficulty.value,
|
||||
difficultyHidden: this.object.difficulty.hidden,
|
||||
useVoidPoint: this.object.useVoidPoint,
|
||||
skillAssistance: this.object.skill.assistance,
|
||||
rnkMessage: null,
|
||||
};
|
||||
|
||||
await this._actor.rollInitiative({
|
||||
rerollInitiative: true,
|
||||
initiativeOptions: {
|
||||
formula: formula.join("+"),
|
||||
// updateTurn: true,
|
||||
messageOptions: {
|
||||
skillId: this.object.skill.id,
|
||||
difficulty: this.object.difficulty.value,
|
||||
difficultyHidden: this.object.difficulty.hidden,
|
||||
useVoidPoint: this.object.useVoidPoint,
|
||||
},
|
||||
messageOptions: msgOptions,
|
||||
},
|
||||
});
|
||||
// Adhesive tape to get the messageId :/
|
||||
message = msgOptions.rnkMessage;
|
||||
delete msgOptions.rnkMessage;
|
||||
} else {
|
||||
// Regular roll, so let's roll !
|
||||
const roll = await new game.l5r5e.RollL5r5e(formula.join("+"));
|
||||
@@ -437,12 +470,20 @@ export class DicePickerDialog extends FormApplication {
|
||||
roll.l5r5e.stance = this.object.ring.id;
|
||||
roll.l5r5e.skillId = this.object.skill.id;
|
||||
roll.l5r5e.skillCatId = this.object.skill.cat;
|
||||
roll.l5r5e.summary.difficulty = this.object.difficulty.value;
|
||||
roll.l5r5e.summary.difficultyHidden = this.object.difficulty.hidden;
|
||||
roll.l5r5e.summary.voidPointUsed = this.object.useVoidPoint;
|
||||
roll.l5r5e.difficulty = this.object.difficulty.value;
|
||||
roll.l5r5e.difficultyHidden = this.object.difficulty.hidden;
|
||||
roll.l5r5e.voidPointUsed = this.object.useVoidPoint;
|
||||
roll.l5r5e.skillAssistance = this.object.skill.assistance;
|
||||
|
||||
await roll.roll();
|
||||
await roll.toMessage();
|
||||
message = await roll.toMessage();
|
||||
}
|
||||
|
||||
if (message) {
|
||||
// if DsN active, delay the popup for 2s
|
||||
new Promise((r) => setTimeout(r, !game.dice3d ? 0 : 2000)).then(() => {
|
||||
new game.l5r5e.RollnKeepDialog(message.id).render(true);
|
||||
});
|
||||
}
|
||||
|
||||
return this.close();
|
||||
@@ -463,7 +504,7 @@ export class DicePickerDialog extends FormApplication {
|
||||
_updateVoidPointUsage() {
|
||||
if (
|
||||
this.object.useVoidPoint &&
|
||||
!this.object.difficulty.add_void_point &&
|
||||
!this.object.difficulty.addVoidPoint &&
|
||||
!!this._actor &&
|
||||
this._actor.data.data.void_points.value < 1
|
||||
) {
|
||||
@@ -480,8 +521,8 @@ export class DicePickerDialog extends FormApplication {
|
||||
const params = {};
|
||||
let name = "DicePicker";
|
||||
|
||||
if (this._actor?._id) {
|
||||
params.actorId = this._actor._id;
|
||||
if (this._actor?.id) {
|
||||
params.actorId = this._actor.id;
|
||||
name = this._actor.name;
|
||||
}
|
||||
|
||||
@@ -496,7 +537,7 @@ export class DicePickerDialog extends FormApplication {
|
||||
|
||||
let command = `new game.l5r5e.DicePickerDialog(${JSON.stringify(params)}).render(true);`;
|
||||
|
||||
let macro = game.macros.entities.find((m) => m.data.name === name && m.data.command === command);
|
||||
let macro = game.macros.contents.find((m) => m.data.name === name && m.data.command === command);
|
||||
if (!macro) {
|
||||
macro = await Macro.create({
|
||||
name: name,
|
||||
@@ -508,22 +549,10 @@ export class DicePickerDialog extends FormApplication {
|
||||
}
|
||||
|
||||
// Search if already in player hotbar
|
||||
if (Object.values(game.user.data.hotbar).includes(macro._id)) {
|
||||
if (Object.values(game.user.data.hotbar).includes(macro.id)) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Search for slot (Fix for FVTT, will be fixed)
|
||||
// slot = false will normally do the 1st available, but always return 0
|
||||
// TODO see when issue is closed to remove these lines and use "assignHotbarMacro(macro, false)"
|
||||
// https://gitlab.com/foundrynet/foundryvtt/-/issues/4382
|
||||
const slot = Array.fromRange(50).find((i) => {
|
||||
if (i < 1) {
|
||||
return false;
|
||||
}
|
||||
return !(i in game.user.data.hotbar);
|
||||
});
|
||||
|
||||
// return game.user.assignHotbarMacro(macro, false); // 1st available
|
||||
return game.user.assignHotbarMacro(macro, slot);
|
||||
return game.user.assignHotbarMacro(macro, "auto"); // 1st available
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@ import { L5rBaseDie } from "./l5r-base-die.js";
|
||||
*/
|
||||
export class AbilityDie extends L5rBaseDie {
|
||||
/** @override */
|
||||
static DENOMINATION = "ds";
|
||||
static DENOMINATION = "s";
|
||||
|
||||
static FACES = {
|
||||
1: { success: 0, explosive: 0, opportunity: 0, strife: 0, image: "skill_blank" },
|
||||
@@ -18,8 +18,8 @@ export class AbilityDie extends L5rBaseDie {
|
||||
8: { success: 1, explosive: 0, opportunity: 0, strife: 0, image: "skill_s" },
|
||||
9: { success: 1, explosive: 0, opportunity: 0, strife: 0, image: "skill_s" },
|
||||
10: { success: 1, explosive: 0, opportunity: 1, strife: 0, image: "skill_so" },
|
||||
11: { success: 1, explosive: 1, opportunity: 0, strife: 1, image: "skill_et" },
|
||||
12: { success: 1, explosive: 1, opportunity: 0, strife: 0, image: "skill_e" },
|
||||
11: { success: 0, explosive: 1, opportunity: 0, strife: 1, image: "skill_et" },
|
||||
12: { success: 0, explosive: 1, opportunity: 0, strife: 0, image: "skill_e" },
|
||||
};
|
||||
|
||||
/** @override */
|
||||
|
||||
@@ -15,23 +15,47 @@ export class L5rBaseDie extends DiceTerm {
|
||||
}
|
||||
|
||||
/**
|
||||
* Return a standardized representation for the displayed formula associated with this DiceTerm
|
||||
* @override
|
||||
* Return the total number of success + explosives
|
||||
* @returns {number}
|
||||
*/
|
||||
get formula() {
|
||||
return `${this.number}${this.constructor.DENOMINATION}${this.modifiers.join("")}`;
|
||||
get totalSuccess() {
|
||||
return this.l5r5e.success + this.l5r5e.explosive;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the full img string used as the label for each rolled result
|
||||
* A string representation of the formula expression for this RollTerm, prior to evaluation.
|
||||
* @type {string}
|
||||
* @override
|
||||
*/
|
||||
static getResultLabel(result) {
|
||||
return `<img src="${CONFIG.l5r5e.paths.assets}dices/default/${this.FACES[result].image}.svg" alt="${result}" />`;
|
||||
get expression() {
|
||||
return `${this.number}d${this.constructor.DENOMINATION}${this.modifiers.join("")}`;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return a standardized representation for the displayed formula associated with this DiceTerm
|
||||
* @return {string}
|
||||
* @override
|
||||
*/
|
||||
get formula() {
|
||||
// No flavor
|
||||
return this.expression;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return a string used as the label for each rolled result
|
||||
* @param {DiceTermResult} result The rolled result
|
||||
* @return {string} The result label
|
||||
*/
|
||||
getResultLabel(result) {
|
||||
return `<img src="${CONFIG.l5r5e.paths.assets}dices/default/${
|
||||
this.constructor.FACES[result.result].image
|
||||
}.svg" alt="${result.result}" />`;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the url of the result face
|
||||
* @param {string|number} result
|
||||
* @return {string}
|
||||
*/
|
||||
static getResultSrc(result) {
|
||||
return `${CONFIG.l5r5e.paths.assets}dices/default/${this.FACES[result].image}.svg`;
|
||||
@@ -41,36 +65,35 @@ export class L5rBaseDie extends DiceTerm {
|
||||
* Return the total result of the DiceTerm if it has been evaluated
|
||||
* Always zero for L5R dices to not count in total for regular dices
|
||||
* @override
|
||||
* @return {number|string}
|
||||
*/
|
||||
get total() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Evaluate the roll term, populating the results Array
|
||||
* Evaluate the term, processing its inputs and finalizing its total.
|
||||
* @param {boolean} minimize Minimize the result, obtaining the smallest possible value.
|
||||
* @param {boolean} maximize Maximize the result, obtaining the largest possible value.
|
||||
* @param {boolean} async Evaluate the term asynchronously, receiving a Promise as the returned value. This will become the default behavior in version 10.x
|
||||
* @return {L5rBaseDie} The evaluated RollTerm
|
||||
* @override
|
||||
*/
|
||||
evaluate({ minimize = false, maximize = false } = {}) {
|
||||
evaluate({ minimize = false, maximize = false, async = false } = {}) {
|
||||
if (this._evaluated) {
|
||||
throw new Error(`This ${this.constructor.name} has already been evaluated and is immutable`);
|
||||
}
|
||||
|
||||
// Roll the initial number of dice
|
||||
for (let n = 1; n <= this.number; n++) {
|
||||
this.roll({ minimize, maximize });
|
||||
this.roll({ minimize, maximize, async }); // TODO async/await in v10.x currently the inline roll is sync
|
||||
}
|
||||
|
||||
// Apply modifiers
|
||||
this._evaluateModifiers();
|
||||
|
||||
// Combine all results
|
||||
this.l5r5e = { success: 0, explosive: 0, opportunity: 0, strife: 0 };
|
||||
this.results.forEach((term) => {
|
||||
const face = this.constructor.FACES[term.result];
|
||||
["success", "explosive", "opportunity", "strife"].forEach((props) => {
|
||||
this.l5r5e[props] += parseInt(face[props]);
|
||||
});
|
||||
});
|
||||
this.l5rSummary();
|
||||
|
||||
// Return the evaluated term
|
||||
this._evaluated = true;
|
||||
@@ -80,35 +103,53 @@ export class L5rBaseDie extends DiceTerm {
|
||||
}
|
||||
|
||||
/**
|
||||
* Roll the DiceTerm by mapping a random uniform draw against the faces of the dice term
|
||||
* @override
|
||||
* Summarise the total of success, strife... for L5R dices for the current Die
|
||||
*/
|
||||
roll(options) {
|
||||
const roll = super.roll(options);
|
||||
|
||||
//roll.l5r5e = this.l5r5e;
|
||||
|
||||
return roll;
|
||||
l5rSummary() {
|
||||
this.l5r5e = { success: 0, explosive: 0, opportunity: 0, strife: 0 };
|
||||
this.results.forEach((term) => {
|
||||
const face = this.constructor.FACES[term.result];
|
||||
["success", "explosive", "opportunity", "strife"].forEach((props) => {
|
||||
this.l5r5e[props] += parseInt(face[props]);
|
||||
});
|
||||
if (face.explosive) {
|
||||
term.exploded = true;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/** @override */
|
||||
static fromData(data) {
|
||||
const roll = super.fromData(data);
|
||||
|
||||
roll.l5r5e = data.l5r5e;
|
||||
|
||||
/**
|
||||
* Roll the DiceTerm by mapping a random uniform draw against the faces of the dice term
|
||||
* @param {Object} options
|
||||
* @return {DiceTermResult}
|
||||
* @override
|
||||
*/
|
||||
roll(options = { minimize: false, maximize: false }) {
|
||||
const roll = super.roll(options);
|
||||
//roll.l5r5e = this.l5r5e;
|
||||
return roll;
|
||||
}
|
||||
|
||||
/**
|
||||
* Represent the data of the Roll as an object suitable for JSON serialization
|
||||
* Construct a DiceTerm from a provided data object
|
||||
* @param {object} data Provided data from an un-serialized term
|
||||
* @return {DiceTerm} The constructed RollTerm
|
||||
* @override
|
||||
*/
|
||||
static fromData(data) {
|
||||
const roll = super.fromData(data);
|
||||
roll.l5r5e = data.l5r5e;
|
||||
return roll;
|
||||
}
|
||||
|
||||
/**
|
||||
* Represent the data of the DiceTerm as an object suitable for JSON serialization
|
||||
* @return {string}
|
||||
* @override
|
||||
*/
|
||||
toJSON() {
|
||||
const json = super.toJSON();
|
||||
|
||||
json.l5r5e = this.l5r5e;
|
||||
|
||||
return json;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@ import { L5rBaseDie } from "./l5r-base-die.js";
|
||||
*/
|
||||
export class RingDie extends L5rBaseDie {
|
||||
/** @override */
|
||||
static DENOMINATION = "dr";
|
||||
static DENOMINATION = "r";
|
||||
|
||||
static FACES = {
|
||||
1: { success: 0, explosive: 0, opportunity: 0, strife: 0, image: "ring_blank" },
|
||||
@@ -13,7 +13,7 @@ export class RingDie extends L5rBaseDie {
|
||||
3: { success: 0, explosive: 0, opportunity: 1, strife: 0, image: "ring_o" },
|
||||
4: { success: 1, explosive: 0, opportunity: 0, strife: 1, image: "ring_st" },
|
||||
5: { success: 1, explosive: 0, opportunity: 0, strife: 0, image: "ring_s" },
|
||||
6: { success: 1, explosive: 1, opportunity: 0, strife: 1, image: "ring_et" },
|
||||
6: { success: 0, explosive: 1, opportunity: 0, strife: 1, image: "ring_et" },
|
||||
};
|
||||
|
||||
/** @override */
|
||||
|
||||
@@ -8,23 +8,35 @@ export class RollnKeepDialog extends FormApplication {
|
||||
*/
|
||||
static CHOICES = {
|
||||
discard: "discard",
|
||||
face_change: "face-change",
|
||||
keep: "keep",
|
||||
nothing: null,
|
||||
reroll: "reroll",
|
||||
reserve: "reserve",
|
||||
// reserve: "reserve",
|
||||
swap: "swap",
|
||||
};
|
||||
|
||||
/**
|
||||
* The current ChatMessage where we come from
|
||||
* @param {ChatMessage} message
|
||||
*/
|
||||
message = null;
|
||||
_message = null;
|
||||
|
||||
/**
|
||||
* The current Roll
|
||||
* @param {RollL5r5e} roll
|
||||
*/
|
||||
roll = null;
|
||||
|
||||
/**
|
||||
* Payload Object
|
||||
*/
|
||||
object = {
|
||||
currentStep: 0,
|
||||
submitDisabled: false,
|
||||
swapDiceFaces: {
|
||||
rings: [],
|
||||
skills: [],
|
||||
},
|
||||
dicesList: [[]],
|
||||
};
|
||||
|
||||
@@ -33,79 +45,133 @@ export class RollnKeepDialog extends FormApplication {
|
||||
* @override
|
||||
*/
|
||||
static get defaultOptions() {
|
||||
return mergeObject(super.defaultOptions, {
|
||||
return foundry.utils.mergeObject(super.defaultOptions, {
|
||||
id: "l5r5e-roll-n-keep-dialog",
|
||||
classes: ["l5r5e", "roll-n-keep-dialog"],
|
||||
template: CONFIG.l5r5e.paths.templates + "dice/roll-n-keep-dialog.html",
|
||||
title: game.i18n.localize("l5r5e.roll_n_keep.title"),
|
||||
width: 660,
|
||||
height: 660,
|
||||
closeOnSubmit: false,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Define a unique and dynamic element ID for the rendered ActorSheet application
|
||||
* Define a unique and dynamic element ID for the rendered application
|
||||
*/
|
||||
get id() {
|
||||
return `l5r5e-roll-n-keep-dialog-${this.message._id}`;
|
||||
return `l5r5e-roll-n-keep-dialog-${this._message.id}`;
|
||||
}
|
||||
|
||||
/**
|
||||
* ChatMessage
|
||||
* @param {ChatMessage} msg
|
||||
*/
|
||||
set message(msg) {
|
||||
this._message = msg instanceof ChatMessage ? msg : null;
|
||||
}
|
||||
|
||||
/**
|
||||
* ChatMessage
|
||||
* @returns {ChatMessage}
|
||||
*/
|
||||
get message() {
|
||||
return this._message;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create the Roll n Keep dialog
|
||||
* @param {ChatMessage} message
|
||||
* @param {number} messageId
|
||||
* @param {FormApplicationOptions} options
|
||||
*/
|
||||
constructor(message, options = {}) {
|
||||
constructor(messageId, options = {}) {
|
||||
super({}, options);
|
||||
this.message = message;
|
||||
this._initialize();
|
||||
this.message = game.messages.get(messageId);
|
||||
|
||||
this.options.editable =
|
||||
this._message?.isAuthor || this._message?._roll.l5r5e.actor?.isOwner || this._message?.isOwner || false;
|
||||
|
||||
this._initializeDiceFaces();
|
||||
this._initializeHistory();
|
||||
}
|
||||
|
||||
/**
|
||||
* Refresh data (used from socket)
|
||||
*/
|
||||
async refresh() {
|
||||
if (!this.message) {
|
||||
if (!this._message) {
|
||||
return;
|
||||
}
|
||||
this._initialize();
|
||||
this._initializeHistory();
|
||||
this.render(false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize the dialog with the message
|
||||
* Render
|
||||
* @param {boolean} force
|
||||
* @param {{left?: number, top?: number, width?: number, height?: number, scale?: number, focus?: boolean, renderContext?: string, renderData?: Object}} options
|
||||
* @returns {Application}
|
||||
* @override
|
||||
*/
|
||||
render(force = false, options = {}) {
|
||||
if (!this._message) {
|
||||
return;
|
||||
}
|
||||
this.position.width = "auto";
|
||||
this.position.height = "auto";
|
||||
return super.render(force, options);
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize the dice history list
|
||||
* @private
|
||||
*/
|
||||
_initialize() {
|
||||
// Get the roll
|
||||
const roll = game.l5r5e.RollL5r5e.fromData(this.message.roll);
|
||||
_initializeHistory() {
|
||||
if (!this._message) {
|
||||
return;
|
||||
}
|
||||
|
||||
console.clear();
|
||||
console.log(roll); // TODO TMP
|
||||
// Get the roll
|
||||
this.roll = game.l5r5e.RollL5r5e.fromData(this._message._roll);
|
||||
|
||||
// Already history
|
||||
if (Array.isArray(roll.l5r5e.history)) {
|
||||
this.object.dicesList = roll.l5r5e.history;
|
||||
if (Array.isArray(this.roll.l5r5e.history)) {
|
||||
this.object.dicesList = this.roll.l5r5e.history;
|
||||
|
||||
let currentStep = this.roll.l5r5e.history.length - 1;
|
||||
if (!this._haveChoice(currentStep, RollnKeepDialog.CHOICES.nothing)) {
|
||||
currentStep += 1;
|
||||
}
|
||||
this.object.currentStep = currentStep;
|
||||
return;
|
||||
}
|
||||
|
||||
// New
|
||||
roll.terms.forEach((term) => {
|
||||
if (typeof term !== "object") {
|
||||
this.object.dicesList = [[]];
|
||||
this.roll.terms.forEach((term) => {
|
||||
if (!(term instanceof game.l5r5e.L5rBaseDie)) {
|
||||
return;
|
||||
}
|
||||
term.results.forEach((res) => {
|
||||
this.object.dicesList[0].push({
|
||||
type: term.constructor.name,
|
||||
face: res.result,
|
||||
explosive: term.constructor.FACES[res.result].explosive,
|
||||
img: term.constructor.getResultSrc(res.result),
|
||||
choice: RollnKeepDialog.CHOICES.nothing,
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Fill the dices faces
|
||||
* @private
|
||||
*/
|
||||
_initializeDiceFaces() {
|
||||
// All faces are unique for rings
|
||||
this.object.swapDiceFaces.rings = Object.keys(game.l5r5e.RingDie.FACES);
|
||||
|
||||
// Only unique for Skills
|
||||
this.object.swapDiceFaces.skills = [1, 3, 6, 8, 10, 11, 12];
|
||||
}
|
||||
|
||||
/**
|
||||
* Create drag-and-drop workflow handlers for this Application
|
||||
* @return An array of DragDrop handlers
|
||||
@@ -121,6 +187,15 @@ export class RollnKeepDialog extends FormApplication {
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Define whether a user is able to begin a dragstart workflow for a given drag selector
|
||||
* @param selector The candidate HTML selector for dragging
|
||||
* @return Can the current user drag this selector?
|
||||
*/
|
||||
_canDragStart(selector) {
|
||||
return this.options.editable;
|
||||
}
|
||||
|
||||
/**
|
||||
* Callback actions which occur at the beginning of a drag start workflow.
|
||||
* @param {DragEvent} event The originating DragEvent
|
||||
@@ -142,35 +217,56 @@ export class RollnKeepDialog extends FormApplication {
|
||||
* @return {Object}
|
||||
*/
|
||||
getData(options = null) {
|
||||
const draggableList = [];
|
||||
this.object.dicesList.forEach((step, idx) => {
|
||||
step.forEach((die, dieNum) => {
|
||||
if (die) {
|
||||
draggableList[dieNum] = idx;
|
||||
}
|
||||
});
|
||||
});
|
||||
// Disable submit / edition
|
||||
this.options.classes = this.options.classes.filter((e) => e !== "finalized");
|
||||
this.object.submitDisabled = false;
|
||||
|
||||
if (this._checkKeepCount(this.object.currentStep)) {
|
||||
const kept = this._getKeepCount(this.object.currentStep);
|
||||
this.object.submitDisabled = kept < 1 || kept > this.roll.l5r5e.keepLimit;
|
||||
} else if (!this.object.dicesList[this.object.currentStep]) {
|
||||
this.options.editable = false;
|
||||
this.options.classes.push("finalized");
|
||||
}
|
||||
|
||||
return {
|
||||
...super.getData(options),
|
||||
cssClass: this.options.classes.join(" "),
|
||||
data: this.object,
|
||||
draggableList: draggableList,
|
||||
l5r5e: this.message._roll.l5r5e,
|
||||
l5r5e: this.roll.l5r5e,
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Listen to html elements
|
||||
* @param {jQuery} html HTML content of the sheet.
|
||||
* @override
|
||||
*/
|
||||
activateListeners(html) {
|
||||
super.activateListeners(html);
|
||||
|
||||
// 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", [
|
||||
{
|
||||
name: game.i18n.localize("l5r5e.roll_n_keep.undo"),
|
||||
icon: '<i class="fas fa-undo"></i>',
|
||||
callback: () => this._undoLastStepChoices(),
|
||||
},
|
||||
]);
|
||||
}
|
||||
|
||||
// *** Everything below here is only needed if the sheet is editable ***
|
||||
if (!this.options.editable) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Finalize Button
|
||||
html.find("#finalize").on("click", (event) => {
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
if (this._getKeepCount() > 0) {
|
||||
if (!this.object.submitDisabled) {
|
||||
this.submit();
|
||||
}
|
||||
});
|
||||
@@ -180,6 +276,11 @@ export class RollnKeepDialog extends FormApplication {
|
||||
* Handle dropped items
|
||||
*/
|
||||
async _onDropItem(event) {
|
||||
// *** Everything below here is only needed if the sheet is editable ***
|
||||
if (!this.options.editable) {
|
||||
return;
|
||||
}
|
||||
|
||||
const type = $(event.currentTarget).data("type");
|
||||
const json = event.dataTransfer.getData("text/plain");
|
||||
if (!json || !Object.values(RollnKeepDialog.CHOICES).some((e) => !!e && e === type)) {
|
||||
@@ -191,81 +292,365 @@ export class RollnKeepDialog extends FormApplication {
|
||||
return;
|
||||
}
|
||||
|
||||
let addNewRoll = false;
|
||||
const current = this.object.dicesList[data.step][data.die];
|
||||
current.choice = type;
|
||||
delete current.newFace;
|
||||
|
||||
// Actions p 26 : change, ignore/discard, reroll, reserve, change face
|
||||
switch (type) {
|
||||
case RollnKeepDialog.CHOICES.keep:
|
||||
if (current.explosive) {
|
||||
addNewRoll = true;
|
||||
case RollnKeepDialog.CHOICES.swap: {
|
||||
// Dice Type Ring/Skill
|
||||
const diceType = $(event.currentTarget).data("die");
|
||||
const diceNewFace = $(event.currentTarget).data("face");
|
||||
|
||||
if (current.type !== diceType || current.face === diceNewFace) {
|
||||
current.choice = RollnKeepDialog.CHOICES.nothing;
|
||||
this.render(false);
|
||||
return false;
|
||||
}
|
||||
|
||||
current.newFace = diceNewFace;
|
||||
break;
|
||||
}
|
||||
|
||||
case RollnKeepDialog.CHOICES.reroll:
|
||||
addNewRoll = true;
|
||||
// If reroll, we need to keep all the line by default
|
||||
this._forceChoiceForDiceWithoutOne(RollnKeepDialog.CHOICES.keep);
|
||||
break;
|
||||
}
|
||||
|
||||
// New roll
|
||||
if (addNewRoll) {
|
||||
if (!this.object.dicesList[data.step + 1]) {
|
||||
this.object.dicesList[data.step + 1] = Array(this.object.dicesList[0].length).fill(null);
|
||||
}
|
||||
this.object.dicesList[data.step + 1][data.die] = await this._newRoll(current.type, type);
|
||||
current.choice = type;
|
||||
|
||||
// Little time saving : if we reach the max kept dices, discard all dices without a choice
|
||||
if (
|
||||
this._checkKeepCount(this.object.currentStep) &&
|
||||
this._getKeepCount(this.object.currentStep) === this.roll.l5r5e.keepLimit
|
||||
) {
|
||||
this._forceChoiceForDiceWithoutOne(RollnKeepDialog.CHOICES.discard);
|
||||
}
|
||||
|
||||
this.render(false);
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Roll a new die avec return the result
|
||||
* @private
|
||||
*/
|
||||
async _newRoll(dieType, actionType) {
|
||||
const roll = await new game.l5r5e.RollL5r5e(dieType === "RingDie" ? "1dr" : "1ds");
|
||||
roll.actor = this.message.roll.l5r5e.actor;
|
||||
roll.l5r5e.stance = this.message.roll.l5r5e.stance;
|
||||
// roll.l5r5e.skillId = this.message.roll.l5r5e.skillId;
|
||||
// roll.l5r5e.skillCatId = this.message.roll.l5r5e.skillCatId;
|
||||
|
||||
await roll.roll();
|
||||
await roll.toMessage({
|
||||
flavor: game.i18n.localize(`l5r5e.roll_n_keep.${actionType}_chat`),
|
||||
});
|
||||
|
||||
const dice = roll.terms[0];
|
||||
const result = dice.results[0].result;
|
||||
|
||||
return {
|
||||
type: dieType,
|
||||
face: result,
|
||||
explosive: dice.constructor.FACES[result].explosive,
|
||||
img: dice.constructor.getResultSrc(result),
|
||||
choice: RollnKeepDialog.CHOICES.nothing,
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the current number of dices kept
|
||||
* @private
|
||||
*/
|
||||
_getKeepCount() {
|
||||
return this.object.dicesList.reduce((acc, step) => {
|
||||
return (
|
||||
acc +
|
||||
step.reduce((acc2, die) => {
|
||||
if (!!die && die.choice === RollnKeepDialog.CHOICES.keep) {
|
||||
acc2 = acc2 + 1;
|
||||
}
|
||||
return acc2;
|
||||
}, 0)
|
||||
);
|
||||
_getKeepCount(step) {
|
||||
return this.object.dicesList[step].reduce((acc, die) => {
|
||||
if (
|
||||
!!die &&
|
||||
[RollnKeepDialog.CHOICES.keep, RollnKeepDialog.CHOICES.reroll, RollnKeepDialog.CHOICES.swap].includes(
|
||||
die.choice
|
||||
)
|
||||
) {
|
||||
acc = acc + 1;
|
||||
}
|
||||
return acc;
|
||||
}, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return true if a "_getKeepCount" is needed
|
||||
* @param {number} step
|
||||
* @returns {boolean}
|
||||
* @private
|
||||
*/
|
||||
_checkKeepCount(step) {
|
||||
return (
|
||||
!this._haveChoice(step, RollnKeepDialog.CHOICES.reroll) &&
|
||||
(step === 0 || this._haveChoice(step - 1, RollnKeepDialog.CHOICES.reroll))
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return true if this choice exist in the current step
|
||||
* @private
|
||||
*/
|
||||
_haveChoice(currentStep, choice) {
|
||||
return (
|
||||
this.object.dicesList[currentStep] &&
|
||||
this.object.dicesList[currentStep].some((e) => !!e && e.choice === choice)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Discard all dices without a choice for the current step
|
||||
* @param {string} newChoice
|
||||
* @private
|
||||
*/
|
||||
_forceChoiceForDiceWithoutOne(newChoice) {
|
||||
this.object.dicesList[this.object.currentStep]
|
||||
.filter((e) => !!e)
|
||||
.map((e) => {
|
||||
if (e.choice === RollnKeepDialog.CHOICES.nothing) {
|
||||
e.choice = newChoice;
|
||||
}
|
||||
return e;
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize dice array for "step" if needed
|
||||
* @param {number} step
|
||||
* @private
|
||||
*/
|
||||
_initializeDicesListStep(step) {
|
||||
if (!this.object.dicesList[step]) {
|
||||
this.object.dicesList[step] = Array(this.object.dicesList[0].length).fill(null);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Apply all choices to build the next step
|
||||
* @returns {Promise<void>}
|
||||
* @private
|
||||
*/
|
||||
async _applyChoices() {
|
||||
const nextStep = this.object.currentStep + 1;
|
||||
const haveReroll = this._haveChoice(this.object.currentStep, RollnKeepDialog.CHOICES.reroll);
|
||||
|
||||
// Foreach kept dices, apply choices
|
||||
const newRolls = {};
|
||||
this.object.dicesList[this.object.currentStep].forEach((die, idx) => {
|
||||
if (!die) {
|
||||
return;
|
||||
}
|
||||
switch (die.choice) {
|
||||
case RollnKeepDialog.CHOICES.keep:
|
||||
if (haveReroll) {
|
||||
// Reroll line add all kept into a new line
|
||||
this._initializeDicesListStep(nextStep);
|
||||
this.object.dicesList[nextStep][idx] = duplicate(
|
||||
this.object.dicesList[this.object.currentStep][idx]
|
||||
);
|
||||
this.object.dicesList[nextStep][idx].choice = RollnKeepDialog.CHOICES.nothing;
|
||||
this.object.dicesList[this.object.currentStep][idx].choice = RollnKeepDialog.CHOICES.discard;
|
||||
} else if (game.l5r5e[die.type].FACES[die.face].explosive) {
|
||||
// Exploding dice : add a new dice in the next step
|
||||
if (!newRolls[die.type]) {
|
||||
newRolls[die.type] = 0;
|
||||
}
|
||||
newRolls[die.type] += 1;
|
||||
}
|
||||
break;
|
||||
|
||||
case RollnKeepDialog.CHOICES.reroll:
|
||||
// Reroll : add a new dice in the next step
|
||||
if (!newRolls[die.type]) {
|
||||
newRolls[die.type] = 0;
|
||||
}
|
||||
newRolls[die.type] += 1;
|
||||
break;
|
||||
|
||||
case RollnKeepDialog.CHOICES.swap:
|
||||
// FaceSwap : add a new dice with selected face in next step
|
||||
this._initializeDicesListStep(nextStep);
|
||||
this.object.dicesList[nextStep][idx] = {
|
||||
type: this.object.dicesList[this.object.currentStep][idx].type,
|
||||
face: this.object.dicesList[this.object.currentStep][idx].newFace,
|
||||
choice: RollnKeepDialog.CHOICES.keep,
|
||||
};
|
||||
delete this.object.dicesList[this.object.currentStep][idx].newFace;
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
// If new rolls, roll and add them
|
||||
if (Object.keys(newRolls).length > 0) {
|
||||
const newRollsResults = await this._newRoll(newRolls);
|
||||
this._initializeDicesListStep(nextStep);
|
||||
this.object.dicesList[this.object.currentStep].forEach((die, idx) => {
|
||||
if (!die) {
|
||||
return;
|
||||
}
|
||||
if (
|
||||
die.choice === RollnKeepDialog.CHOICES.reroll ||
|
||||
(!haveReroll &&
|
||||
die.choice === RollnKeepDialog.CHOICES.keep &&
|
||||
game.l5r5e[die.type].FACES[die.face].explosive)
|
||||
) {
|
||||
this.object.dicesList[nextStep][idx] = newRollsResults[die.type].shift();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Transform a array (of int or object) into a formula ring/skill
|
||||
* @param rolls
|
||||
* @returns {string}
|
||||
* @private
|
||||
*/
|
||||
_arrayToFormula(rolls) {
|
||||
const formula = [];
|
||||
if (rolls["RingDie"]) {
|
||||
const rings = Array.isArray(rolls["RingDie"]) ? rolls["RingDie"].length : rolls["RingDie"];
|
||||
formula.push(rings + "dr");
|
||||
}
|
||||
if (rolls["AbilityDie"]) {
|
||||
const skills = Array.isArray(rolls["AbilityDie"]) ? rolls["AbilityDie"].length : rolls["AbilityDie"];
|
||||
formula.push(skills + "ds");
|
||||
}
|
||||
if (formula.length < 1) {
|
||||
return "";
|
||||
}
|
||||
return formula.join("+");
|
||||
}
|
||||
|
||||
/**
|
||||
* Roll all new dice at once (better performance) and return the result
|
||||
* @private
|
||||
*/
|
||||
async _newRoll(newRolls) {
|
||||
const out = {
|
||||
RingDie: [],
|
||||
AbilityDie: [],
|
||||
};
|
||||
|
||||
const roll = await new game.l5r5e.RollL5r5e(this._arrayToFormula(newRolls));
|
||||
await roll.roll();
|
||||
|
||||
// Show DsN dice for the new roll
|
||||
if (game.dice3d !== undefined) {
|
||||
game.dice3d.showForRoll(roll, game.user, true);
|
||||
}
|
||||
|
||||
roll.terms.forEach((term) => {
|
||||
if (!(term instanceof game.l5r5e.L5rBaseDie)) {
|
||||
return;
|
||||
}
|
||||
term.results.forEach((res) => {
|
||||
out[term.constructor.name].push({
|
||||
type: term.constructor.name,
|
||||
face: res.result,
|
||||
choice: RollnKeepDialog.CHOICES.nothing,
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Rebuild the message roll
|
||||
* @param {boolean} forceKeep If true keep all dice regardless their choice
|
||||
* @returns {Promise<void>}
|
||||
* @private
|
||||
*/
|
||||
async _rebuildRoll(forceKeep = false) {
|
||||
// Get all kept dices + new (choice null)
|
||||
const diceList = this.object.dicesList.reduce((acc, step, stepIdx) => {
|
||||
const haveReroll = stepIdx > 0 && this._haveChoice(stepIdx - 1, RollnKeepDialog.CHOICES.reroll);
|
||||
step.forEach((die, idx) => {
|
||||
if (
|
||||
!!die &&
|
||||
(forceKeep ||
|
||||
die.choice === RollnKeepDialog.CHOICES.keep ||
|
||||
(haveReroll && die.choice === RollnKeepDialog.CHOICES.nothing))
|
||||
) {
|
||||
if (!acc[die.type]) {
|
||||
acc[die.type] = [];
|
||||
}
|
||||
// Check previous dice, to add html classes in chat
|
||||
if (stepIdx > 0 && this.object.dicesList[stepIdx - 1][idx]) {
|
||||
switch (this.object.dicesList[stepIdx - 1][idx].choice) {
|
||||
case RollnKeepDialog.CHOICES.reroll:
|
||||
die.class = "rerolled";
|
||||
break;
|
||||
case RollnKeepDialog.CHOICES.swap:
|
||||
die.class = "swapped";
|
||||
break;
|
||||
}
|
||||
}
|
||||
acc[die.type].push(die);
|
||||
}
|
||||
});
|
||||
return acc;
|
||||
}, {});
|
||||
|
||||
// Re create a new roll
|
||||
const roll = await new game.l5r5e.RollL5r5e(this._arrayToFormula(diceList));
|
||||
roll.l5r5e = {
|
||||
...this.roll.l5r5e,
|
||||
summary: roll.l5r5e.summary,
|
||||
history: this.object.dicesList,
|
||||
};
|
||||
|
||||
// Fill the data
|
||||
roll.evaluate({ async: false });
|
||||
|
||||
// Modify results
|
||||
roll.terms.map((term) => {
|
||||
if (term instanceof game.l5r5e.L5rBaseDie) {
|
||||
term.results.map((res) => {
|
||||
const die = diceList[term.constructor.name].shift();
|
||||
res.result = die.face;
|
||||
|
||||
// add class to term result
|
||||
if (die.class) {
|
||||
res[die.class] = true;
|
||||
}
|
||||
return res;
|
||||
});
|
||||
term.l5rSummary();
|
||||
}
|
||||
return term;
|
||||
});
|
||||
|
||||
// Recompute summary
|
||||
roll.l5rSummary();
|
||||
|
||||
// Add roll & history to message
|
||||
this.roll = roll;
|
||||
}
|
||||
|
||||
/**
|
||||
* Send the new roll in chat and delete the old message
|
||||
* @returns {Promise<void>}
|
||||
* @private
|
||||
*/
|
||||
async _toChatMessage() {
|
||||
// Keep old Ids
|
||||
const appOldId = this.id;
|
||||
const msgOldId = this._message.id;
|
||||
|
||||
if (this.roll.l5r5e.isInitiativeRoll) {
|
||||
let msgOptions = {
|
||||
rnkRoll: this.roll,
|
||||
};
|
||||
|
||||
await this.roll.l5r5e.actor.rollInitiative({
|
||||
rerollInitiative: true,
|
||||
initiativeOptions: {
|
||||
messageOptions: msgOptions,
|
||||
},
|
||||
});
|
||||
// Adhesive tape to get the message :/
|
||||
this.message = msgOptions.rnkMessage;
|
||||
delete msgOptions.rnkMessage;
|
||||
} else {
|
||||
// Send it to chat, switch to new message
|
||||
this.message = await this.roll.toMessage();
|
||||
}
|
||||
|
||||
// Refresh viewers
|
||||
if (this._message) {
|
||||
game.l5r5e.sockets.updateMessageIdAndRefresh(appOldId, this._message.id);
|
||||
}
|
||||
|
||||
// Delete old chat message related to this series
|
||||
if (game.settings.get("l5r5e", "rnk-deleteOldMessage")) {
|
||||
if (game.user.isGM) {
|
||||
const message = game.messages.get(msgOldId);
|
||||
if (message) {
|
||||
message.delete();
|
||||
}
|
||||
} else {
|
||||
game.l5r5e.sockets.deleteChatMessage(msgOldId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This method is called upon form submission after form data is validated
|
||||
* @param event The initial triggering submission event
|
||||
@@ -274,32 +659,66 @@ export class RollnKeepDialog extends FormApplication {
|
||||
* @override
|
||||
*/
|
||||
async _updateObject(event, formData) {
|
||||
console.log("**** _updateObject");
|
||||
// *** Everything below here is only needed if the sheet is editable ***
|
||||
if (!this.options.editable) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Notify the change to other players
|
||||
// game.l5r5e.sockets.refreshAppId(this.id);
|
||||
// Discard all dices without a choice for the current step
|
||||
this._forceChoiceForDiceWithoutOne(RollnKeepDialog.CHOICES.discard);
|
||||
|
||||
// this.message._roll.l5r5e.history = {test: "yahooo"};
|
||||
// Apply all choices to build the next step
|
||||
await this._applyChoices();
|
||||
|
||||
// await message.update({
|
||||
// data: {
|
||||
// roll: roll
|
||||
// }
|
||||
// });
|
||||
// message.render(false);
|
||||
// *** Below this the current step become the next step ***
|
||||
this.object.currentStep++;
|
||||
|
||||
// console.log(roll.toJSON(), this.message);
|
||||
// Rebuild the roll
|
||||
await this._rebuildRoll(false);
|
||||
|
||||
// ui.chat.updateMessage(message);
|
||||
// ui.chat.postOne(message, false);
|
||||
// Send the new roll in chat and delete the old message
|
||||
await this._toChatMessage();
|
||||
|
||||
// if (game.user.isGM) {
|
||||
// message.delete();
|
||||
// } else {
|
||||
// game.l5r5e.sockets.deleteChatMessage(messageId);
|
||||
// }
|
||||
// If a next step exist, rerender, else close
|
||||
if (this.object.dicesList[this.object.currentStep]) {
|
||||
return this.render(false);
|
||||
}
|
||||
return this.close();
|
||||
}
|
||||
|
||||
// return this.close();
|
||||
/**
|
||||
* Undo the last step choice
|
||||
* @returns {Promise<Application|any>}
|
||||
* @private
|
||||
*/
|
||||
async _undoLastStepChoices() {
|
||||
// Find the step to work to
|
||||
this.object.currentStep = this.object.dicesList[this.object.currentStep]
|
||||
? this.object.currentStep
|
||||
: Math.max(0, this.object.currentStep - 1);
|
||||
|
||||
// If all clear, delete this step
|
||||
if (this._haveChoice(this.object.currentStep, RollnKeepDialog.CHOICES.nothing)) {
|
||||
if (this.object.currentStep === 0) {
|
||||
return;
|
||||
}
|
||||
this.object.dicesList.pop();
|
||||
this.object.dicesList = this.object.dicesList.filter((e) => !!e);
|
||||
this.object.currentStep--;
|
||||
}
|
||||
|
||||
// Clear choices
|
||||
this.object.dicesList[this.object.currentStep]
|
||||
.filter((e) => !!e)
|
||||
.map((e) => {
|
||||
e.choice = RollnKeepDialog.CHOICES.nothing;
|
||||
return e;
|
||||
});
|
||||
|
||||
this.options.editable = true;
|
||||
await this._rebuildRoll(true);
|
||||
await this._toChatMessage();
|
||||
return this.render(false);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -309,21 +728,22 @@ export class RollnKeepDialog extends FormApplication {
|
||||
*/
|
||||
static async onChatAction(event) {
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
|
||||
// Extract card data
|
||||
const button = $(event.currentTarget);
|
||||
button.attr("disabled", true);
|
||||
const card = button.parents(".l5r5e.item-display.dices-l5r");
|
||||
const messageId = card.parents(".chat-message").data("message-id");
|
||||
const message = game.messages.get(messageId);
|
||||
|
||||
// Validate permission to proceed with the roll n keep
|
||||
if (!message || !message._roll.l5r5e.actor.owner) {
|
||||
return;
|
||||
// Already open ? close it
|
||||
const app = Object.values(ui.windows).find((e) => e.id === `l5r5e-roll-n-keep-dialog-${messageId}`);
|
||||
if (app) {
|
||||
app.close();
|
||||
} else {
|
||||
new RollnKeepDialog(messageId).render(true);
|
||||
}
|
||||
|
||||
new RollnKeepDialog(message).render(true);
|
||||
|
||||
// Re-enable the button
|
||||
button.attr("disabled", false);
|
||||
}
|
||||
|
||||
@@ -5,33 +5,39 @@ export class RollL5r5e extends Roll {
|
||||
static CHAT_TEMPLATE = "dice/chat-roll.html";
|
||||
static TOOLTIP_TEMPLATE = "dice/tooltip.html";
|
||||
|
||||
constructor(...args) {
|
||||
super(...args);
|
||||
constructor(formula, data = {}, options = {}) {
|
||||
super(formula, data, options);
|
||||
|
||||
this.l5r5e = {
|
||||
stance: "",
|
||||
skillId: "",
|
||||
skillCatId: "",
|
||||
actor: null,
|
||||
difficulty: 2,
|
||||
difficultyHidden: false,
|
||||
voidPointUsed: false,
|
||||
keepLimit: null,
|
||||
isInitiativeRoll: false,
|
||||
skillAssistance: 0,
|
||||
initialFormula: null,
|
||||
dicesTypes: {
|
||||
std: false,
|
||||
l5r: false,
|
||||
},
|
||||
summary: {
|
||||
difficulty: 2,
|
||||
difficultyHidden: false,
|
||||
voidPointUsed: false,
|
||||
ringsUsed: 0,
|
||||
totalSuccess: 0,
|
||||
totalBonus: 0,
|
||||
success: 0,
|
||||
explosive: 0,
|
||||
opportunity: 0,
|
||||
strife: 0,
|
||||
},
|
||||
history: null,
|
||||
rnkEnded: false,
|
||||
};
|
||||
|
||||
// Parse flavor for stance and skillId
|
||||
const flavors = Array.from(args[0].matchAll(/\d+d(s|r)\[([^\]]+)\]/gmu));
|
||||
const flavors = Array.from(formula.matchAll(/\d+d(s|r)\[([^\]]+)\]/gmu));
|
||||
flavors.forEach((res) => {
|
||||
if (res[1] === "r" && !!res[2] && this.l5r5e.stance === "") {
|
||||
this.l5r5e.stance = res[2];
|
||||
@@ -40,20 +46,18 @@ export class RollL5r5e extends Roll {
|
||||
this.l5r5e.skillId = res[2];
|
||||
}
|
||||
});
|
||||
|
||||
// TODO parse difficulty stance skillId from cmd line ?
|
||||
}
|
||||
|
||||
set actor(actor) {
|
||||
this.l5r5e.actor = actor instanceof Actor && actor.owner ? actor : null;
|
||||
this.l5r5e.actor = actor instanceof Actor && actor.isOwner ? actor : null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Execute the Roll, replacing dice and evaluating the total result
|
||||
* @override
|
||||
**/
|
||||
evaluate({ minimize = false, maximize = false } = {}) {
|
||||
if (this._rolled) {
|
||||
evaluate({ minimize = false, maximize = false, async = false } = {}) {
|
||||
if (this._evaluated) {
|
||||
throw new Error("This Roll object has already been rolled.");
|
||||
}
|
||||
if (this.terms.length < 1) {
|
||||
@@ -61,30 +65,22 @@ export class RollL5r5e extends Roll {
|
||||
}
|
||||
|
||||
// Clean terms (trim symbols)
|
||||
this.terms = this._identifyTerms(this.constructor.cleanFormula(this.terms));
|
||||
this.terms = this.constructor.simplifyTerms(this.terms);
|
||||
|
||||
// Roll dices and inner dices
|
||||
this._total = 0;
|
||||
|
||||
// Roll
|
||||
super.evaluate({ minimize, maximize });
|
||||
super.evaluate({ minimize, maximize, async });
|
||||
this._evaluated = true;
|
||||
|
||||
// Current terms - L5R Summary
|
||||
this.terms.forEach((term) => this._l5rSummary(term));
|
||||
// Save initial formula
|
||||
if (!this.l5r5e.initialFormula) {
|
||||
this.l5r5e.initialFormula = this.formula;
|
||||
}
|
||||
|
||||
// Check inner L5R rolls - L5R Summary
|
||||
this._dice.forEach((term) => this._l5rSummary(term));
|
||||
|
||||
// Store final outputs
|
||||
this._rolled = true;
|
||||
this.l5r5e.dicesTypes.std = this.dice.some(
|
||||
(term) => term instanceof DiceTerm && !(term instanceof game.l5r5e.L5rBaseDie)
|
||||
); // ignore math symbols
|
||||
this.l5r5e.dicesTypes.l5r = this.dice.some((term) => term instanceof game.l5r5e.L5rBaseDie);
|
||||
this.l5r5e.summary.ringsUsed = this.dice.reduce(
|
||||
(acc, term) => (term instanceof game.l5r5e.RingDie ? acc + term.number : acc),
|
||||
0
|
||||
);
|
||||
// Compute summary
|
||||
this.l5rSummary();
|
||||
|
||||
return this;
|
||||
}
|
||||
@@ -92,10 +88,61 @@ export class RollL5r5e extends Roll {
|
||||
/**
|
||||
* Summarise the total of success, strife... for L5R dices for the current roll
|
||||
*
|
||||
* @private
|
||||
*/
|
||||
l5rSummary() {
|
||||
const summary = this.l5r5e.summary;
|
||||
|
||||
// Reset totals
|
||||
summary.success = 0;
|
||||
summary.explosive = 0;
|
||||
summary.opportunity = 0;
|
||||
summary.strife = 0;
|
||||
summary.totalSuccess = 0;
|
||||
|
||||
// Current terms - L5R Summary
|
||||
this.terms.forEach((term) => this._l5rTermSummary(term));
|
||||
|
||||
// Check inner L5R rolls - L5R Summary
|
||||
this._dice.forEach((term) => this._l5rTermSummary(term));
|
||||
|
||||
// Store final outputs
|
||||
this.l5r5e.dicesTypes.std = this.dice.some(
|
||||
(term) => term instanceof DiceTerm && !(term instanceof game.l5r5e.L5rBaseDie)
|
||||
); // ignore math symbols
|
||||
this.l5r5e.dicesTypes.l5r = this.dice.some((term) => term instanceof game.l5r5e.L5rBaseDie);
|
||||
summary.totalBonus = Math.max(0, summary.totalSuccess - this.l5r5e.difficulty);
|
||||
|
||||
if (!this.l5r5e.keepLimit) {
|
||||
// count ring die + skill assistance
|
||||
this.l5r5e.keepLimit =
|
||||
this.dice.reduce((acc, term) => (term instanceof game.l5r5e.RingDie ? acc + term.number : acc), 0) +
|
||||
Math.max(0, this.l5r5e.skillAssistance || 0);
|
||||
|
||||
// if only bulk skill dice, count the skill dice
|
||||
if (!this.l5r5e.keepLimit) {
|
||||
this.l5r5e.keepLimit = this.dice.reduce(
|
||||
(acc, term) => (term instanceof game.l5r5e.AbilityDie ? acc + term.number : acc),
|
||||
0
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// RnK Can do some action ?
|
||||
if (this.l5r5e.history) {
|
||||
this.l5r5e.rnkEnded = !this.l5r5e.history[this.l5r5e.history.length - 1].some(
|
||||
(e) => !!e && e.choice === null
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Summarise the total of success, strife... for L5R dices for the current term
|
||||
*
|
||||
* @param term
|
||||
* @private
|
||||
*/
|
||||
_l5rSummary(term) {
|
||||
_l5rTermSummary(term) {
|
||||
if (!(term instanceof game.l5r5e.L5rBaseDie)) {
|
||||
return;
|
||||
}
|
||||
@@ -103,7 +150,7 @@ export class RollL5r5e extends Roll {
|
||||
["success", "explosive", "opportunity", "strife"].forEach((props) => {
|
||||
this.l5r5e.summary[props] += parseInt(term.l5r5e[props]);
|
||||
});
|
||||
// TODO Others advantage/disadvantage
|
||||
this.l5r5e.summary.totalSuccess += term.totalSuccess;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -111,7 +158,7 @@ export class RollL5r5e extends Roll {
|
||||
* @override
|
||||
*/
|
||||
get total() {
|
||||
if (!this._rolled) {
|
||||
if (!this._evaluated) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -132,7 +179,6 @@ export class RollL5r5e extends Roll {
|
||||
.filter((c) => !!c)
|
||||
.join(" | ");
|
||||
}
|
||||
|
||||
return total;
|
||||
}
|
||||
|
||||
@@ -156,12 +202,13 @@ export class RollL5r5e extends Roll {
|
||||
display: !isL5rDie || contexte?.from !== "render",
|
||||
rolls: term.results.map((r) => {
|
||||
return {
|
||||
result: cls.getResultLabel(r.result),
|
||||
result: term.getResultLabel(r),
|
||||
classes: [
|
||||
cls.name.toLowerCase(),
|
||||
"d" + term.faces,
|
||||
!isL5rDie && r.rerolled ? "rerolled" : null,
|
||||
!isL5rDie && r.exploded ? "exploded" : null,
|
||||
isL5rDie && r.swapped ? "swapped" : null,
|
||||
r.rerolled ? "rerolled" : null,
|
||||
r.exploded ? "exploded" : null,
|
||||
!isL5rDie && r.discarded ? "discarded" : null,
|
||||
!isL5rDie && r.result === 1 ? "min" : null,
|
||||
!isL5rDie && r.result === term.faces ? "max" : null,
|
||||
@@ -188,9 +235,9 @@ export class RollL5r5e extends Roll {
|
||||
* @override
|
||||
*/
|
||||
async render(chatOptions = {}) {
|
||||
chatOptions = mergeObject(
|
||||
chatOptions = foundry.utils.mergeObject(
|
||||
{
|
||||
user: game.user._id,
|
||||
user: game.user.id,
|
||||
flavor: null,
|
||||
template: CONFIG.l5r5e.paths.templates + this.constructor.CHAT_TEMPLATE,
|
||||
blind: false,
|
||||
@@ -200,17 +247,10 @@ export class RollL5r5e extends Roll {
|
||||
const isPrivate = chatOptions.isPrivate;
|
||||
|
||||
// Execute the roll, if needed
|
||||
if (!this._rolled) {
|
||||
if (!this._evaluated) {
|
||||
this.roll();
|
||||
}
|
||||
|
||||
const canRnK = false; // TODO TMP dev in progress
|
||||
// const canRnK = !this.l5r5e.dicesTypes.std
|
||||
// && this.l5r5e.dicesTypes.l5r
|
||||
// && this.dice.length > 1
|
||||
// && this.l5r5e.actor // pb with dice with no actor
|
||||
// && this.l5r5e.actor.owner;
|
||||
|
||||
// Define chat data
|
||||
const chatData = {
|
||||
formula: isPrivate ? "???" : this._formula,
|
||||
@@ -224,13 +264,20 @@ export class RollL5r5e extends Roll {
|
||||
? {}
|
||||
: {
|
||||
...this.l5r5e,
|
||||
canRnK: canRnK,
|
||||
dices: this.dice.map((d) => {
|
||||
dices: this.dice.map((term) => {
|
||||
const isL5rDie = term instanceof game.l5r5e.L5rBaseDie;
|
||||
return {
|
||||
diceTypeL5r: d instanceof game.l5r5e.L5rBaseDie,
|
||||
rolls: d.results.map((r) => {
|
||||
diceTypeL5r: isL5rDie,
|
||||
rolls: term.results.map((r) => {
|
||||
return {
|
||||
result: d.constructor.getResultLabel(r.result),
|
||||
result: term.getResultLabel(r),
|
||||
classes: [
|
||||
isL5rDie && r.swapped ? "swapped" : null,
|
||||
r.rerolled ? "rerolled" : null,
|
||||
r.exploded ? "exploded" : null,
|
||||
]
|
||||
.filter((c) => !!c)
|
||||
.join(" "),
|
||||
};
|
||||
}),
|
||||
};
|
||||
@@ -247,30 +294,27 @@ export class RollL5r5e extends Roll {
|
||||
* This function can either create the ChatMessage directly, or return the data object that will be used to create.
|
||||
* @override
|
||||
*/
|
||||
toMessage(messageData = {}, { rollMode = null, create = true } = {}) {
|
||||
async toMessage(messageData = {}, { rollMode = null, create = true } = {}) {
|
||||
// Perform the roll, if it has not yet been rolled
|
||||
if (!this._rolled) {
|
||||
this.evaluate();
|
||||
if (!this._evaluated) {
|
||||
this.evaluate({ async: false });
|
||||
}
|
||||
|
||||
// RollMode
|
||||
const rMode = rollMode || messageData.rollMode || game.settings.get("core", "rollMode");
|
||||
|
||||
let template = CONST.CHAT_MESSAGE_TYPES.ROLL;
|
||||
if (["gmroll", "blindroll"].includes(rMode)) {
|
||||
messageData.whisper = ChatMessage.getWhisperRecipients("GM");
|
||||
if (rollMode) {
|
||||
ChatMessage.applyRollMode(messageData, rMode);
|
||||
}
|
||||
if (rMode === "blindroll") messageData.blind = true;
|
||||
if (rMode === "selfroll") messageData.whisper = [game.user.id];
|
||||
|
||||
// Prepare chat data
|
||||
messageData = mergeObject(
|
||||
messageData = foundry.utils.mergeObject(
|
||||
{
|
||||
user: game.user._id,
|
||||
type: template,
|
||||
user: game.user.id,
|
||||
type: CONST.CHAT_MESSAGE_TYPES.ROLL,
|
||||
content: this._total,
|
||||
sound: CONFIG.sounds.dice,
|
||||
speaker: {
|
||||
actor: this.l5r5e.actor?._id || null,
|
||||
actor: this.l5r5e.actor?.id || null,
|
||||
token: this.l5r5e.actor?.token || null,
|
||||
alias: this.l5r5e.actor?.name || null,
|
||||
},
|
||||
@@ -279,11 +323,13 @@ export class RollL5r5e extends Roll {
|
||||
);
|
||||
messageData.roll = this;
|
||||
|
||||
// Prepare message options
|
||||
const messageOptions = { rollMode: rMode };
|
||||
|
||||
// Either create the message or just return the chat data
|
||||
return create ? CONFIG.ChatMessage.entityClass.create(messageData, messageOptions) : messageData;
|
||||
const message = await ChatMessage.implementation.create(messageData, {
|
||||
rollMode: rMode,
|
||||
temporary: !create,
|
||||
isL5r5eTemplate: true,
|
||||
});
|
||||
return create ? message : message.data;
|
||||
}
|
||||
|
||||
/** @override */
|
||||
@@ -294,10 +340,16 @@ export class RollL5r5e extends Roll {
|
||||
roll.l5r5e = duplicate(data.l5r5e);
|
||||
|
||||
// get real Actor object
|
||||
if (data.l5r5e.actor && !(data.l5r5e.actor instanceof game.l5r5e.ActorL5r5e)) {
|
||||
const actor = game.actors.get(data.l5r5e.actor.id);
|
||||
if (actor) {
|
||||
roll.l5r5e.actor = actor;
|
||||
if (data.l5r5e.actor) {
|
||||
if (data.l5r5e.actor instanceof game.l5r5e.ActorL5r5e) {
|
||||
// duplicate break the object, relink it
|
||||
roll.l5r5e.actor = data.l5r5e.actor;
|
||||
} else {
|
||||
// only id, get the object
|
||||
const actor = game.actors.get(data.l5r5e.actor.id);
|
||||
if (actor) {
|
||||
roll.l5r5e.actor = actor;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -311,13 +363,13 @@ export class RollL5r5e extends Roll {
|
||||
toJSON() {
|
||||
const json = super.toJSON();
|
||||
|
||||
json.data = duplicate(this.data);
|
||||
json.l5r5e = duplicate(this.l5r5e);
|
||||
json.data = foundry.utils.duplicate(this.data);
|
||||
json.l5r5e = foundry.utils.duplicate(this.l5r5e);
|
||||
|
||||
// lightweight the Actor
|
||||
if (json.l5r5e.actor) {
|
||||
json.l5r5e.actor = {
|
||||
id: json.l5r5e.actor._id,
|
||||
id: json.l5r5e.actor._id, // method "id" not exist in json, need to use "_id" here
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -29,6 +29,13 @@ export const RegisterHandlebars = function () {
|
||||
return game.i18n.localize("l5r5e.techniques." + techniqueName.toLowerCase());
|
||||
});
|
||||
|
||||
/* ------------------------------------ */
|
||||
/* Dice */
|
||||
/* ------------------------------------ */
|
||||
Handlebars.registerHelper("getDiceFaceUrl", function (diceClass, faceId) {
|
||||
return game.l5r5e[diceClass].getResultSrc(faceId);
|
||||
});
|
||||
|
||||
/* ------------------------------------ */
|
||||
/* Utility */
|
||||
/* ------------------------------------ */
|
||||
|
||||
@@ -13,7 +13,7 @@ export class HelpDialog extends FormApplication {
|
||||
* @override
|
||||
*/
|
||||
static get defaultOptions() {
|
||||
return mergeObject(super.defaultOptions, {
|
||||
return foundry.utils.mergeObject(super.defaultOptions, {
|
||||
id: "l5r5e-help-dialog",
|
||||
classes: ["l5r5e", "help-dialog"],
|
||||
template: CONFIG.l5r5e.paths.templates + "help/help-dialog.html",
|
||||
@@ -39,6 +39,7 @@ export class HelpDialog extends FormApplication {
|
||||
|
||||
/**
|
||||
* Listen to html elements
|
||||
* @param {jQuery} html HTML content of the sheet.
|
||||
* @override
|
||||
*/
|
||||
activateListeners(html) {
|
||||
|
||||
@@ -6,6 +6,8 @@ import { ItemL5r5e } from "./item.js";
|
||||
export class HelpersL5r5e {
|
||||
/**
|
||||
* Get Rings/Element for List / Select
|
||||
* @param {Actor|null} actor
|
||||
* @return {{id: string, label: *, value}[]}
|
||||
*/
|
||||
static getRingsList(actor = null) {
|
||||
return CONFIG.l5r5e.stances.map((e) => ({
|
||||
@@ -17,6 +19,8 @@ export class HelpersL5r5e {
|
||||
|
||||
/**
|
||||
* Get Skills for List / Select with groups
|
||||
* @param {boolean} useGroup
|
||||
* @return {{cat: any, id: any, label: *}[]}
|
||||
*/
|
||||
static getSkillsList(useGroup = false) {
|
||||
if (!useGroup) {
|
||||
@@ -43,16 +47,29 @@ export class HelpersL5r5e {
|
||||
|
||||
/**
|
||||
* Get Techniques for List / Select
|
||||
* @param types core|school|title|custom
|
||||
* @param displayInTypes null|true|false
|
||||
* @returns {{displayInTypes: boolean|*, id: any, label: *, type: *}[]}
|
||||
*/
|
||||
static getTechniquesList() {
|
||||
return CONFIG.l5r5e.techniques.map((e) => ({
|
||||
id: e,
|
||||
label: game.i18n.localize(`l5r5e.techniques.${e}`),
|
||||
}));
|
||||
static getTechniquesList({ types = [], displayInTypes = null }) {
|
||||
return Array.from(CONFIG.l5r5e.techniques)
|
||||
.filter(
|
||||
([id, cfg]) =>
|
||||
(types.length === 0 || types.includes(cfg.type)) &&
|
||||
(displayInTypes === null || cfg.displayInTypes === displayInTypes)
|
||||
)
|
||||
.map(([id, cfg]) => ({
|
||||
id,
|
||||
label: game.i18n.localize(`l5r5e.techniques.${id}`),
|
||||
type: cfg.type,
|
||||
displayInTypes: cfg.displayInTypes,
|
||||
}));
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the target object on a drag n drop event, or null if not found
|
||||
* @param {DragEvent} event
|
||||
* @return {Promise<null>}
|
||||
*/
|
||||
static async getDragnDropTargetObject(event) {
|
||||
const json = event.dataTransfer.getData("text/plain");
|
||||
@@ -60,109 +77,139 @@ export class HelpersL5r5e {
|
||||
return null;
|
||||
}
|
||||
const data = JSON.parse(json);
|
||||
return await HelpersL5r5e.getObjectGameOrPack(data.id, data.type, data.pack);
|
||||
return await HelpersL5r5e.getObjectGameOrPack(data);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the object from Game or Pack by his ID, or null if not found
|
||||
* @param {number} id
|
||||
* @param {string} type
|
||||
* @param {string|null} data
|
||||
* @param {string|null} pack
|
||||
* @return {Promise<null>}
|
||||
*/
|
||||
static async getObjectGameOrPack(id, type, pack = null) {
|
||||
static async getObjectGameOrPack({ id, type, data = null, pack = null }) {
|
||||
let document = null;
|
||||
|
||||
try {
|
||||
// Direct Object
|
||||
if (data?._id) {
|
||||
document = HelpersL5r5e.createItemFromCompendium(data);
|
||||
} else if (!id || !type) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// Named pack
|
||||
if (pack) {
|
||||
const data = await game.packs.get(pack).getEntity(id);
|
||||
if (data) {
|
||||
return HelpersL5r5e.createItemFromCompendium(data);
|
||||
if (!document) {
|
||||
// If no pack passed, but it's a core item, we know the pack to get it
|
||||
if (!pack && id.substr(0, 7) === "L5RCore") {
|
||||
pack = HelpersL5r5e.getPackNameForCoreItem(id);
|
||||
}
|
||||
|
||||
if (pack) {
|
||||
const data = await game.packs.get(pack).getDocument(id);
|
||||
if (data) {
|
||||
document = HelpersL5r5e.createItemFromCompendium(data);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Game object
|
||||
let item = null;
|
||||
switch (type) {
|
||||
case "Actor":
|
||||
item = game.actors.get(id);
|
||||
break;
|
||||
|
||||
case "Item":
|
||||
item = game.items.get(id);
|
||||
break;
|
||||
|
||||
case "JournalEntry":
|
||||
item = game.journal.get(id);
|
||||
break;
|
||||
|
||||
case "Macro":
|
||||
item = game.macros.get(id);
|
||||
break;
|
||||
}
|
||||
if (item) {
|
||||
await HelpersL5r5e.refreshItemProperties(item);
|
||||
return item;
|
||||
if (!document) {
|
||||
document = CONFIG[type].collection.instance.get(id);
|
||||
}
|
||||
|
||||
// Unknown pack object, iterate all packs
|
||||
for (const comp of game.packs) {
|
||||
// TODO Bug with babele if "comp.getEntity(id)" return null...
|
||||
const babeleFix = (await comp.getIndex()).some((e) => e._id === id);
|
||||
if (!babeleFix) {
|
||||
continue;
|
||||
if (!document) {
|
||||
for (const comp of game.packs) {
|
||||
// TODO Bug with babele if "comp.getDocument(id)" return null...
|
||||
const babeleFix = (await comp.getIndex()).some((e) => e.id === id);
|
||||
if (!babeleFix) {
|
||||
continue;
|
||||
}
|
||||
|
||||
const data = await comp.getDocument(id);
|
||||
if (data) {
|
||||
document = HelpersL5r5e.createItemFromCompendium(data);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Final
|
||||
if (document) {
|
||||
// Flag the source GUID
|
||||
if (document.uuid && !document.getFlag("core", "sourceId")) {
|
||||
document.data.update({ "flags.core.sourceId": document.uuid });
|
||||
}
|
||||
|
||||
const data = await comp.getEntity(id);
|
||||
if (data) {
|
||||
return HelpersL5r5e.createItemFromCompendium(data);
|
||||
}
|
||||
await HelpersL5r5e.refreshItemProperties(document);
|
||||
document.prepareData();
|
||||
}
|
||||
} catch (err) {
|
||||
console.warn(err);
|
||||
}
|
||||
return null;
|
||||
return document;
|
||||
}
|
||||
|
||||
/**
|
||||
* Make a temporary item for compendium drag n drop
|
||||
* @param {ItemL5r5e|any[]} data
|
||||
* @return {ItemL5r5e}
|
||||
*/
|
||||
static async createItemFromCompendium(data) {
|
||||
if (!["item", "armor", "weapon", "technique", "peculiarity", "property"].includes(data.type)) {
|
||||
static createItemFromCompendium(data) {
|
||||
if (
|
||||
![
|
||||
"item",
|
||||
"armor",
|
||||
"weapon",
|
||||
"technique",
|
||||
"property",
|
||||
"peculiarity",
|
||||
"advancement",
|
||||
"title",
|
||||
"bond",
|
||||
"signature_scroll",
|
||||
"item_pattern",
|
||||
].includes(data.type)
|
||||
) {
|
||||
return data;
|
||||
}
|
||||
|
||||
let item;
|
||||
let document;
|
||||
if (data instanceof ItemL5r5e) {
|
||||
item = data;
|
||||
} else if (game.user.hasPermission("ACTOR_CREATE")) {
|
||||
// Fail if a player do not have the right to create object (even if this is a temporary)
|
||||
item = await ItemL5r5e.create(data, { temporary: true });
|
||||
|
||||
// reinject compendium id (required for properties)
|
||||
item.data._id = data._id;
|
||||
document = data;
|
||||
} else {
|
||||
// Quick object
|
||||
item = new ItemL5r5e(data);
|
||||
document = new ItemL5r5e(data);
|
||||
}
|
||||
await HelpersL5r5e.refreshItemProperties(item);
|
||||
return item;
|
||||
return document;
|
||||
}
|
||||
|
||||
/**
|
||||
* Babele and properties specific
|
||||
* @param {Document} document
|
||||
* @return {Promise<void>}
|
||||
*/
|
||||
static async refreshItemProperties(item) {
|
||||
if (item.data.data.properties && typeof Babele !== "undefined") {
|
||||
item.data.data.properties = await Promise.all(
|
||||
item.data.data.properties.map(async (property) => {
|
||||
const gameProp = await game.l5r5e.HelpersL5r5e.getObjectGameOrPack(property.id, "Item");
|
||||
static async refreshItemProperties(document) {
|
||||
if (document.data.data.properties && typeof Babele !== "undefined") {
|
||||
document.data.data.properties = await Promise.all(
|
||||
document.data.data.properties.map(async (property) => {
|
||||
const gameProp = await HelpersL5r5e.getObjectGameOrPack({ id: property.id, type: "Item" });
|
||||
if (gameProp) {
|
||||
return { id: gameProp._id, name: gameProp.name };
|
||||
return { id: gameProp.id, name: gameProp.name };
|
||||
}
|
||||
return property;
|
||||
})
|
||||
);
|
||||
document.data.update({ "data.properties": document.data.data.properties });
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert (op), (ex)... to associated symbols for content/descriptions
|
||||
* @param {string} text Input text
|
||||
* @param {boolean} toSymbol If True convert symbol to html (op), if false html to symbol
|
||||
* @return {string}
|
||||
*/
|
||||
static convertSymbols(text, toSymbol) {
|
||||
CONFIG.l5r5e.symbols.forEach((cfg, tag) => {
|
||||
@@ -172,7 +219,7 @@ export class HelpersL5r5e {
|
||||
`<i class="${cfg.class}" title="${game.i18n.localize(cfg.label)}"></i>`
|
||||
);
|
||||
} else {
|
||||
text = text.replace(new RegExp(`<i class="${cfg.class}" title="[^"]*"></i>`, "gi"), tag);
|
||||
text = text.replace(new RegExp(`<i class="${cfg.class}" title(="[^"]*")?></i>`, "gi"), tag);
|
||||
}
|
||||
});
|
||||
return text;
|
||||
@@ -180,8 +227,163 @@ export class HelpersL5r5e {
|
||||
|
||||
/**
|
||||
* Escape Regx characters
|
||||
* @param {string} str
|
||||
* @return {string}
|
||||
*/
|
||||
static escapeRegExp(str) {
|
||||
return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the associated pack for a core item (time saving)
|
||||
* @param {string} documentId
|
||||
* @return {string}
|
||||
*/
|
||||
static getPackNameForCoreItem(documentId) {
|
||||
const core = new Map();
|
||||
core.set("Pro", "l5r5e.core-properties");
|
||||
core.set("Kat", "l5r5e.core-techniques-kata");
|
||||
core.set("Kih", "l5r5e.core-techniques-kiho");
|
||||
core.set("Ins", "l5r5e.core-techniques-inversion");
|
||||
core.set("Inv", "l5r5e.core-techniques-invocations");
|
||||
core.set("Rit", "l5r5e.core-techniques-rituals");
|
||||
core.set("Shu", "l5r5e.core-techniques-shuji");
|
||||
core.set("Mah", "l5r5e.core-techniques-maho");
|
||||
core.set("Nin", "l5r5e.core-techniques-ninjutsu");
|
||||
core.set("Sch", "l5r5e.core-techniques-school");
|
||||
core.set("Mas", "l5r5e.core-techniques-mastery");
|
||||
core.set("Ite", "l5r5e.core-items");
|
||||
core.set("Arm", "l5r5e.core-armors");
|
||||
core.set("Wea", "l5r5e.core-weapons");
|
||||
core.set("Bon", "l5r5e.core-bonds");
|
||||
core.set("Tit", "l5r5e.core-titles");
|
||||
core.set("Itp", "l5r5e.core-item-patterns");
|
||||
core.set("Sig", "l5r5e.core-signature-scrolls");
|
||||
core.set("Dis", "l5r5e.core-peculiarities-distinctions");
|
||||
core.set("Pas", "l5r5e.core-peculiarities-passions");
|
||||
core.set("Adv", "l5r5e.core-peculiarities-adversities");
|
||||
core.set("Anx", "l5r5e.core-peculiarities-anxieties");
|
||||
return core.get(documentId.replace(/L5RCore(\w{3})\d+/gi, "$1"));
|
||||
}
|
||||
|
||||
/**
|
||||
* Show a confirm dialog before a deletion
|
||||
* @param {string} content
|
||||
* @param {function} callback The callback function for confirmed action
|
||||
*/
|
||||
static confirmDeleteDialog(content, callback) {
|
||||
new Dialog({
|
||||
title: game.i18n.localize("Delete"),
|
||||
content,
|
||||
buttons: {
|
||||
confirm: {
|
||||
icon: '<i class="fas fa-trash"></i>',
|
||||
label: game.i18n.localize("Yes"),
|
||||
callback,
|
||||
},
|
||||
cancel: {
|
||||
icon: '<i class="fas fa-times"></i>',
|
||||
label: game.i18n.localize("No"),
|
||||
},
|
||||
},
|
||||
}).render(true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Display a dialog to choose what Item type to add
|
||||
* @param {string[]|null} types
|
||||
* @return {Promise<*>} Return the item type choice (armor, bond...)
|
||||
*/
|
||||
static async showSubItemDialog(types = null) {
|
||||
// If no types, get the full list
|
||||
if (!types) {
|
||||
types = game.system.entityTypes.Item;
|
||||
}
|
||||
const title = game.i18n.format("ENTITY.Create", { entity: game.i18n.localize("Item") });
|
||||
|
||||
// Render the template
|
||||
const html = await 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;
|
||||
obj[t] = game.i18n.has(label) ? game.i18n.localize(label) : t;
|
||||
return obj;
|
||||
}, {}),
|
||||
});
|
||||
|
||||
// Display the dialog
|
||||
return Dialog.prompt({
|
||||
title: title,
|
||||
content: html,
|
||||
label: title,
|
||||
callback: (html) => $(html).find("[name='type'] option:selected").val(),
|
||||
rejectClose: false,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Notify Applications using Difficulty settings that the values was changed
|
||||
*/
|
||||
static notifyDifficultyChange() {
|
||||
["l5r5e-dice-picker-dialog", "l5r5e-gm-tools-dialog"].forEach((appId) => {
|
||||
const app = Object.values(ui.windows).find((e) => e.id === appId);
|
||||
if (app && typeof app.refresh === "function") {
|
||||
app.refresh();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Compute the Xp cost for cursus and total
|
||||
* @param {ItemL5r5e|ItemL5r5e[]} itemsList Item Data
|
||||
* @return {{xp_used_total: number, xp_used: number}}
|
||||
*/
|
||||
static getItemsXpCost(itemsList) {
|
||||
let xp_used = 0;
|
||||
let xp_used_total = 0;
|
||||
|
||||
if (!Array.isArray(itemsList)) {
|
||||
itemsList = [itemsList];
|
||||
}
|
||||
|
||||
itemsList.forEach((item) => {
|
||||
let xp = parseInt(item.data.xp_used_total || item.data.xp_used || 0);
|
||||
|
||||
// Full price
|
||||
xp_used_total += xp;
|
||||
|
||||
// if not in curriculum, xp spent /2 for this item
|
||||
if (!item.data.in_curriculum && xp > 0) {
|
||||
xp = Math.ceil(xp / 2);
|
||||
}
|
||||
|
||||
// Halved or full
|
||||
xp_used += xp;
|
||||
});
|
||||
return { xp_used, xp_used_total };
|
||||
}
|
||||
|
||||
/**
|
||||
* Subscribe to common events from the sheet.
|
||||
* @param {jQuery} html HTML content of the sheet.
|
||||
*/
|
||||
static commonListeners(html) {
|
||||
// Toggle
|
||||
html.find(".toggle-on-click").on("click", (event) => {
|
||||
const elmt = $(event.currentTarget).data("toggle");
|
||||
const tgt = html.find("." + elmt);
|
||||
tgt.toggleClass("toggle-active");
|
||||
});
|
||||
|
||||
// Compendium folder link
|
||||
html.find(".compendium-link").on("click", (event) => {
|
||||
const packId = $(event.currentTarget).data("pack");
|
||||
if (packId) {
|
||||
const pack = game.packs.get(packId);
|
||||
if (pack) {
|
||||
pack.render(true);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,12 +20,15 @@ export default class HooksL5r5e {
|
||||
/**
|
||||
* Do anything once the system is ready
|
||||
*/
|
||||
static ready() {
|
||||
static async ready() {
|
||||
// Migration stuff
|
||||
if (game.l5r5e.migrations.needUpdate()) {
|
||||
if (game.l5r5e.migrations.needUpdate(game.l5r5e.migrations.NEEDED_VERSION)) {
|
||||
game.l5r5e.migrations.migrateWorld();
|
||||
}
|
||||
|
||||
// For some reasons, not always really ready, so wait a little
|
||||
await new Promise((r) => setTimeout(r, 500));
|
||||
|
||||
// Settings TN and EncounterType
|
||||
if (game.user.isGM) {
|
||||
new game.l5r5e.GmToolsDialog().render(true);
|
||||
@@ -40,9 +43,10 @@ export default class HooksL5r5e {
|
||||
.on("click", () => new game.l5r5e.HelpDialog().render(true))
|
||||
.prop("title", game.i18n.localize("l5r5e.logo.alt"));
|
||||
|
||||
// Spanish specific - Disclaimer "not translated by Edge"
|
||||
if (game.i18n.lang === "es") {
|
||||
ui.notifications.info(game.i18n.localize("l5r5e.global.edge_translation_disclaimer"));
|
||||
// If any disclaimer "not translated by Edge"
|
||||
const disclaimer = game.i18n.localize("l5r5e.global.edge_translation_disclaimer");
|
||||
if (disclaimer !== "l5r5e.global.edge_translation_disclaimer") {
|
||||
ui.notifications.info(disclaimer);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -56,6 +60,32 @@ export default class HooksL5r5e {
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Modify the content for chat roll command
|
||||
*
|
||||
* The 0.8.x introduce a weird behavior, it get to roll.total as content event if a template was defined.
|
||||
* So we need to intercept a chat roll (/r 1dr) for having them use the right template and not the inline (=total)
|
||||
*
|
||||
* @param {ChatMessage} document
|
||||
* @param {Object} data
|
||||
* @param {Object} options
|
||||
* @param {string} userId
|
||||
* @return {boolean}
|
||||
*/
|
||||
static preCreateChatMessage(document, data, options, userId) {
|
||||
// Roll from DP have the "isL5r5eTemplate" option set
|
||||
if (!document.isRoll || options?.isL5r5eTemplate || !document.data?.roll) {
|
||||
return;
|
||||
}
|
||||
|
||||
// So now we have our wrong message only, redo it using the roll
|
||||
const roll = game.l5r5e.RollL5r5e.fromJSON(document.data.roll);
|
||||
roll.toMessage();
|
||||
|
||||
// Return false to let the system known we handled this
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Chat Message
|
||||
*/
|
||||
@@ -88,14 +118,14 @@ export default class HooksL5r5e {
|
||||
// *** Conf ***
|
||||
const encounterTypeList = Object.keys(CONFIG.l5r5e.initiativeSkills);
|
||||
const prepared = {
|
||||
character: game.settings.get("l5r5e", "initiative.prepared.character"),
|
||||
adversary: game.settings.get("l5r5e", "initiative.prepared.adversary"),
|
||||
minion: game.settings.get("l5r5e", "initiative.prepared.minion"),
|
||||
character: game.settings.get("l5r5e", "initiative-prepared-character"),
|
||||
adversary: game.settings.get("l5r5e", "initiative-prepared-adversary"),
|
||||
minion: game.settings.get("l5r5e", "initiative-prepared-minion"),
|
||||
};
|
||||
|
||||
// *** Template ***
|
||||
const tpl = await renderTemplate(`${CONFIG.l5r5e.paths.templates}gm/combat-tracker-bar.html`, {
|
||||
encounterType: game.settings.get("l5r5e", "initiative.encounter"),
|
||||
encounterType: game.settings.get("l5r5e", "initiative-encounter"),
|
||||
encounterTypeList,
|
||||
prepared,
|
||||
});
|
||||
@@ -118,31 +148,25 @@ export default class HooksL5r5e {
|
||||
return;
|
||||
}
|
||||
game.settings
|
||||
.set("l5r5e", "initiative.encounter", encounter)
|
||||
.set("l5r5e", "initiative-encounter", encounter)
|
||||
.then(() => HooksL5r5e._gmCombatBar(app, html, data));
|
||||
});
|
||||
|
||||
html.find(".prepared-control").on("click", (event) => {
|
||||
html.find(".prepared-control").on("mousedown", (event) => {
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
let preparedId = $(event.currentTarget).data("id");
|
||||
const preparedId = $(event.currentTarget).data("id");
|
||||
if (!Object.hasOwnProperty.call(prepared, preparedId)) {
|
||||
return;
|
||||
}
|
||||
let value = prepared[preparedId];
|
||||
switch (value) {
|
||||
case "false":
|
||||
value = "true";
|
||||
break;
|
||||
case "true":
|
||||
value = "null";
|
||||
break;
|
||||
case "null":
|
||||
value = "false";
|
||||
break;
|
||||
}
|
||||
const rev = event.which === 3;
|
||||
const nextValue = {
|
||||
false: rev ? "true" : "null",
|
||||
true: rev ? "null" : "false",
|
||||
null: rev ? "false" : "true",
|
||||
};
|
||||
game.settings
|
||||
.set("l5r5e", `initiative.prepared.${preparedId}`, value)
|
||||
.set("l5r5e", `initiative-prepared-${preparedId}`, nextValue[prepared[preparedId]])
|
||||
.then(() => HooksL5r5e._gmCombatBar(app, html, data));
|
||||
});
|
||||
}
|
||||
@@ -153,18 +177,20 @@ export default class HooksL5r5e {
|
||||
static async renderCompendium(app, html, data) {
|
||||
// templates "item" : add Rarity
|
||||
// Techniques / Peculiarities : add Ring / Rank
|
||||
if (app.entity === "Item") {
|
||||
const content = await app.getContent();
|
||||
content.forEach((item) => {
|
||||
if (["weapon", "armor", "item", "peculiarity", "technique", "peculiarity"].includes(item.type)) {
|
||||
html.find(`[data-entry-id="${item._id}"]`).append(
|
||||
if (app.collection.documentName === "Item") {
|
||||
const content = await app.collection.getDocuments();
|
||||
content.forEach((document) => {
|
||||
if (["weapon", "armor", "item", "peculiarity", "technique", "peculiarity"].includes(document.type)) {
|
||||
html.find(`[data-document-id="${document.id}"]`).append(
|
||||
`<i` +
|
||||
(item.data.data.ring ? ` class="i_${item.data.data.ring}"` : ``) +
|
||||
(document.data.data.ring ? ` class="i_${document.data.data.ring}"` : ``) +
|
||||
`>` +
|
||||
(item.data.data.rarity
|
||||
? `${game.i18n.localize("l5r5e.rarity")} ${item.data.data.rarity}`
|
||||
(document.data.data.rarity
|
||||
? `${game.i18n.localize("l5r5e.rarity")} ${document.data.data.rarity}`
|
||||
: "") +
|
||||
(document.data.data.rank
|
||||
? game.i18n.localize("l5r5e.rank") + " " + document.data.data.rank
|
||||
: "") +
|
||||
(item.data.data.rank ? game.i18n.localize("l5r5e.rank") + " " + item.data.data.rank : "") +
|
||||
`</i>`
|
||||
);
|
||||
}
|
||||
@@ -174,7 +200,7 @@ export default class HooksL5r5e {
|
||||
}
|
||||
|
||||
/**
|
||||
* DiceSoNice Hook
|
||||
* DiceSoNice - Add L5R DicePresets
|
||||
*/
|
||||
static diceSoNiceReady(dice3d) {
|
||||
const texturePath = `${CONFIG.l5r5e.paths.assets}dices/default/3d/`;
|
||||
@@ -188,7 +214,7 @@ export default class HooksL5r5e {
|
||||
dice3d.addDicePreset(
|
||||
{
|
||||
name: "L5R Ring Dice",
|
||||
type: "ddr", // don't known why the "dd" prefix is required, term is "r"
|
||||
type: "dr",
|
||||
labels: Object.keys(game.l5r5e.RingDie.FACES).map(
|
||||
(e) => `${texturePath}${game.l5r5e.RingDie.FACES[e].image.replace("ring_", "")}.png`
|
||||
),
|
||||
@@ -205,7 +231,7 @@ export default class HooksL5r5e {
|
||||
dice3d.addDicePreset(
|
||||
{
|
||||
name: "L5R Skill Dice",
|
||||
type: "dds",
|
||||
type: "ds",
|
||||
labels: Object.keys(game.l5r5e.AbilityDie.FACES).map(
|
||||
(e) => `${texturePath}${game.l5r5e.AbilityDie.FACES[e].image.replace("skill_", "")}.png`
|
||||
),
|
||||
@@ -218,4 +244,16 @@ export default class HooksL5r5e {
|
||||
"d12"
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* DiceSoNice - Do not show 3D roll for the Roll n Keep series
|
||||
*
|
||||
* @param {string} messageId
|
||||
* @param {object} context
|
||||
*/
|
||||
static diceSoNiceRollStart(messageId, context) {
|
||||
if (context.roll.l5r5e?.history) {
|
||||
context.blind = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,10 +1,240 @@
|
||||
export class ItemL5r5e extends Item {
|
||||
/**
|
||||
* A reference to the Collection of embedded Item instances in the document, indexed by _id.
|
||||
* @returns {Collection<BaseItem>}
|
||||
*/
|
||||
get items() {
|
||||
return this.data.data.items || null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the linked Actor instance if any (current or embed)
|
||||
* @return {Actor|null}
|
||||
*/
|
||||
get actor() {
|
||||
return super.actor || game.actors.get(this.data.data.parent_id?.actor_id) || null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new entity using provided input data
|
||||
* @override
|
||||
*/
|
||||
static async create(data, options = {}) {
|
||||
data.img = `${CONFIG.l5r5e.paths.assets}icons/items/${data.type}.svg`;
|
||||
return super.create(data, options);
|
||||
static async create(data, context = {}) {
|
||||
if (data.img === undefined) {
|
||||
data.img = `${CONFIG.l5r5e.paths.assets}icons/items/${data.type}.svg`;
|
||||
}
|
||||
return super.create(data, context);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update this Document using incremental data, saving it to the database.
|
||||
* @see {@link Document.updateDocuments}
|
||||
* @param {object} [data={}] Differential update data which modifies the existing values of this document data
|
||||
* @param {DocumentModificationContext} [context={}] Additional context which customizes the update workflow
|
||||
* @returns {Promise<Document>} The updated Document instance
|
||||
*/
|
||||
async update(data = {}, context = {}) {
|
||||
// Regular
|
||||
if (!this.data.data.parent_id) {
|
||||
return super.update(data, context);
|
||||
}
|
||||
|
||||
// **** Embed Items, need to get the parents ****
|
||||
const parentItem = this.getItemFromParentId();
|
||||
if (!parentItem) {
|
||||
console.warn(`Embed parentItem not found`);
|
||||
return;
|
||||
}
|
||||
|
||||
// Merge (DocumentData cannot be set)
|
||||
const result = foundry.utils.mergeObject(this.data, foundry.utils.expandObject(data));
|
||||
if (result.name) {
|
||||
this.data.name = result.name;
|
||||
}
|
||||
if (result.img) {
|
||||
this.data.img = result.img;
|
||||
}
|
||||
if (result.data) {
|
||||
this.data.data = result.data;
|
||||
}
|
||||
|
||||
// Update
|
||||
await parentItem.updateEmbedItem(this.data.toObject(false));
|
||||
|
||||
// Return new value for sheet
|
||||
return new Promise((resolve) => resolve(this));
|
||||
}
|
||||
|
||||
/** @override */
|
||||
prepareData() {
|
||||
super.prepareData();
|
||||
|
||||
// Prepare Embed items
|
||||
if (!(this.data.data.items instanceof Map)) {
|
||||
const itemsData = Array.isArray(this.data.data.items) ? this.data.data.items : [];
|
||||
this.data.data.items = new Map();
|
||||
|
||||
itemsData.forEach((item) => {
|
||||
this.addEmbedItem(item, { save: false, newId: false, addBonusToActor: false });
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// ***** parent ids management *****
|
||||
/**
|
||||
* Return a string with idemId + actorId if any
|
||||
* @return {{item_id: (string|null), actor_id?: (string|null)}}
|
||||
*/
|
||||
getParentsIds() {
|
||||
const parent = {
|
||||
item_id: this.id,
|
||||
};
|
||||
if (this.actor?.data?._id) {
|
||||
parent.actor_id = this.actor.data._id;
|
||||
}
|
||||
return parent;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the Item Object for the "parentId"
|
||||
* @return {ItemL5r5e|null}
|
||||
*/
|
||||
getItemFromParentId() {
|
||||
const parentIds = this.data.data.parent_id;
|
||||
let parentItem;
|
||||
|
||||
if (parentIds?.actor_id) {
|
||||
// Actor item object
|
||||
const parentActor = parentIds.actor_id ? game.actors.get(parentIds.actor_id) : null;
|
||||
parentItem = parentActor?.items.get(parentIds.item_id);
|
||||
} else if (parentIds?.item_id) {
|
||||
// World Object
|
||||
parentItem = game.items.get(parentIds.item_id);
|
||||
}
|
||||
|
||||
return parentItem;
|
||||
}
|
||||
|
||||
// ***** Embedded items management *****
|
||||
/**
|
||||
* Shortcut for this.data.data.items.get
|
||||
* @param id
|
||||
* @return {ItemL5r5e|null}
|
||||
*/
|
||||
getEmbedItem(id) {
|
||||
return this.items?.get(id) || null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a Embed Item
|
||||
* @param {ItemL5r5e} item Object to add
|
||||
* @param {boolean} save if we save in db or not (used internally)
|
||||
* @param {boolean} newId if we change the id
|
||||
* @param {boolean} addBonusToActor if we update the actor bonus for advancements
|
||||
* @return {Promise<string>}
|
||||
*/
|
||||
async addEmbedItem(item, { save = true, newId = true, addBonusToActor = true } = {}) {
|
||||
if (!item) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!(item instanceof Item) && item?.name && item?.type) {
|
||||
// Data -> Item
|
||||
item = new ItemL5r5e(item);
|
||||
}
|
||||
|
||||
// New id
|
||||
if (newId) {
|
||||
item.data._id = foundry.utils.randomID();
|
||||
}
|
||||
|
||||
// Copy the parent permission to the sub item
|
||||
item.data.permission = this.data.permission;
|
||||
|
||||
// Tag parent (flags won't work as we have no id in db)
|
||||
item.data.data.parent_id = this.getParentsIds();
|
||||
|
||||
// Object
|
||||
this.data.data.items.set(item.data._id, item);
|
||||
|
||||
// Add bonus to actor
|
||||
if (addBonusToActor) {
|
||||
const actor = this.actor;
|
||||
if (item instanceof Item && actor instanceof Actor) {
|
||||
actor.addBonus(item);
|
||||
}
|
||||
}
|
||||
|
||||
if (save) {
|
||||
await this.saveEmbedItems();
|
||||
}
|
||||
return item.data._id;
|
||||
}
|
||||
|
||||
/**
|
||||
* Update a Embed Item
|
||||
* @param {ItemL5r5e} item Object to add
|
||||
* @param {boolean} save if we save in db or not (used internally)
|
||||
* @return {Promise<string>}
|
||||
*/
|
||||
async updateEmbedItem(item, { save = true } = {}) {
|
||||
return await this.addEmbedItem(item, { save, newId: false, addBonusToActor: false });
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete the Embed Item and clear the actor bonus if any
|
||||
* @param id Item id
|
||||
* @param {boolean} save if we save in db or not (used internally)
|
||||
* @param {boolean} removeBonusFromActor if we update the actor bonus for advancements
|
||||
* @return {Promise<void>}
|
||||
*/
|
||||
async deleteEmbedItem(id, { save = true, removeBonusFromActor = true } = {}) {
|
||||
if (!this.data.data.items.has(id)) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Remove bonus from actor
|
||||
if (removeBonusFromActor) {
|
||||
const actor = this.actor;
|
||||
const item = this.data.data.items.get(id);
|
||||
if (item instanceof Item && actor instanceof Actor) {
|
||||
actor.removeBonus(item);
|
||||
}
|
||||
}
|
||||
|
||||
// Remove the embed item
|
||||
this.data.data.items.delete(id);
|
||||
|
||||
if (save) {
|
||||
await this.saveEmbedItems();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate new Ids for the embed items
|
||||
* @return {Promise<void>}
|
||||
*/
|
||||
async generateNewIdsForAllEmbedItems() {
|
||||
// Clear olds ids
|
||||
const oldItems = Array.from(this.data.data.items);
|
||||
this.data.data.items = new Map();
|
||||
|
||||
// Re-add with new ids
|
||||
oldItems.forEach(([id, item]) => {
|
||||
this.addEmbedItem(item, { save: false, newId: true, addBonusToActor: false });
|
||||
});
|
||||
|
||||
return this.saveEmbedItems();
|
||||
}
|
||||
|
||||
/**
|
||||
* Save all the Embed Items
|
||||
* @return {Promise<void>}
|
||||
*/
|
||||
async saveEmbedItems() {
|
||||
await this.update({
|
||||
"data.items": Array.from(this.data.data.items).map(([id, item]) => item.data.toObject(false)),
|
||||
});
|
||||
this.sheet.render(false);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,11 +7,11 @@ export class AdvancementSheetL5r5e extends ItemSheetL5r5e {
|
||||
/**
|
||||
* Sub Types of advancements
|
||||
*/
|
||||
static types = ["ring", "skill"]; // "peculiarity" and "technique" have theirs own xp count
|
||||
static types = ["ring", "skill"]; // others have theirs own xp count
|
||||
|
||||
/** @override */
|
||||
static get defaultOptions() {
|
||||
return mergeObject(super.defaultOptions, {
|
||||
return foundry.utils.mergeObject(super.defaultOptions, {
|
||||
classes: ["l5r5e", "sheet", "advancement"],
|
||||
template: CONFIG.l5r5e.paths.templates + "items/advancement/advancement-sheet.html",
|
||||
width: 520,
|
||||
@@ -20,8 +20,8 @@ export class AdvancementSheetL5r5e extends ItemSheetL5r5e {
|
||||
});
|
||||
}
|
||||
|
||||
async getData() {
|
||||
const sheetData = await super.getData();
|
||||
async getData(options = {}) {
|
||||
const sheetData = await super.getData(options);
|
||||
|
||||
sheetData.data.subTypesList = AdvancementSheetL5r5e.types;
|
||||
sheetData.data.skillsList = game.l5r5e.HelpersL5r5e.getSkillsList(true);
|
||||
@@ -31,7 +31,7 @@ export class AdvancementSheetL5r5e extends ItemSheetL5r5e {
|
||||
|
||||
/**
|
||||
* Subscribe to events from the sheet.
|
||||
* @param html HTML content of the sheet.
|
||||
* @param {jQuery} html HTML content of the sheet.
|
||||
*/
|
||||
activateListeners(html) {
|
||||
super.activateListeners(html);
|
||||
@@ -47,46 +47,18 @@ export class AdvancementSheetL5r5e extends ItemSheetL5r5e {
|
||||
|
||||
html.find("#advancement_type").on("change", (event) => {
|
||||
if ($(event.target).val() === "skill") {
|
||||
this._updateChoice(
|
||||
{
|
||||
ring: currentRing,
|
||||
},
|
||||
{
|
||||
skill: currentSkill,
|
||||
}
|
||||
);
|
||||
this._updateChoice({ ring: currentRing }, { skill: currentSkill });
|
||||
} else {
|
||||
this._updateChoice(
|
||||
{
|
||||
skill: currentSkill,
|
||||
},
|
||||
{
|
||||
ring: currentRing,
|
||||
}
|
||||
);
|
||||
this._updateChoice({ skill: currentSkill }, { ring: currentRing });
|
||||
}
|
||||
});
|
||||
|
||||
html.find("#advancement_ring").on("change", (event) => {
|
||||
this._updateChoice(
|
||||
{
|
||||
ring: currentRing,
|
||||
},
|
||||
{
|
||||
ring: $(event.target).val(),
|
||||
}
|
||||
);
|
||||
this._updateChoice({ ring: currentRing }, { ring: $(event.target).val() });
|
||||
});
|
||||
|
||||
html.find("#advancement_skill").on("change", (event) => {
|
||||
this._updateChoice(
|
||||
{
|
||||
skill: currentSkill,
|
||||
},
|
||||
{
|
||||
skill: $(event.target).val(),
|
||||
}
|
||||
);
|
||||
this._updateChoice({ skill: currentSkill }, { skill: $(event.target).val() });
|
||||
});
|
||||
}
|
||||
|
||||
@@ -101,47 +73,55 @@ export class AdvancementSheetL5r5e extends ItemSheetL5r5e {
|
||||
|
||||
// Modify image to reflect choice
|
||||
if (newChoice.ring) {
|
||||
name = game.i18n.localize(`l5r5e.rings.${newChoice.ring}`) + "+1";
|
||||
img = `systems/l5r5e/assets/icons/rings/${newChoice.ring}.svg`;
|
||||
} else if (newChoice.skill) {
|
||||
name =
|
||||
game.i18n.localize(`l5r5e.skills.${CONFIG.l5r5e.skills.get(newChoice.skill)}.${newChoice.skill}`) +
|
||||
"+1";
|
||||
img = `systems/l5r5e/assets/dices/default/skill_blank.svg`;
|
||||
}
|
||||
|
||||
// Object embed in actor ?
|
||||
if (this.actor) {
|
||||
const actor = duplicate(this.actor.data.data);
|
||||
const actor = this.document.actor;
|
||||
if (actor) {
|
||||
const actorData = foundry.utils.duplicate(actor.data.data);
|
||||
let skillCatId = null;
|
||||
|
||||
// Old choices
|
||||
if (oldChoice.ring) {
|
||||
actor.rings[oldChoice.ring] = Math.max(1, actor.rings[oldChoice.ring] - 1);
|
||||
actorData.rings[oldChoice.ring] = Math.max(1, actorData.rings[oldChoice.ring] - 1);
|
||||
}
|
||||
if (oldChoice.skill) {
|
||||
skillCatId = CONFIG.l5r5e.skills.get(oldChoice.skill);
|
||||
actor.skills[skillCatId][oldChoice.skill] = Math.max(0, actor.skills[skillCatId][oldChoice.skill] - 1);
|
||||
actorData.skills[skillCatId][oldChoice.skill] = Math.max(
|
||||
0,
|
||||
actorData.skills[skillCatId][oldChoice.skill] - 1
|
||||
);
|
||||
}
|
||||
|
||||
// new choices
|
||||
if (newChoice.ring) {
|
||||
actor.rings[newChoice.ring] = actor.rings[newChoice.ring] + 1;
|
||||
xp_used = actor.rings[newChoice.ring] * CONFIG.l5r5e.xp.ringCostMultiplier;
|
||||
actorData.rings[newChoice.ring] = actorData.rings[newChoice.ring] + 1;
|
||||
xp_used = actorData.rings[newChoice.ring] * CONFIG.l5r5e.xp.ringCostMultiplier;
|
||||
name =
|
||||
game.i18n.localize(`l5r5e.rings.${newChoice.ring}`) +
|
||||
` +1 (${actor.rings[newChoice.ring] - 1} -> ${actor.rings[newChoice.ring]})`;
|
||||
` +1 (${actorData.rings[newChoice.ring] - 1} -> ${actorData.rings[newChoice.ring]})`;
|
||||
}
|
||||
if (newChoice.skill) {
|
||||
skillCatId = CONFIG.l5r5e.skills.get(newChoice.skill);
|
||||
actor.skills[skillCatId][newChoice.skill] = actor.skills[skillCatId][newChoice.skill] + 1;
|
||||
xp_used = actor.skills[skillCatId][newChoice.skill] * CONFIG.l5r5e.xp.skillCostMultiplier;
|
||||
actorData.skills[skillCatId][newChoice.skill] = actorData.skills[skillCatId][newChoice.skill] + 1;
|
||||
xp_used = actorData.skills[skillCatId][newChoice.skill] * CONFIG.l5r5e.xp.skillCostMultiplier;
|
||||
name =
|
||||
game.i18n.localize(`l5r5e.skills.${skillCatId}.${newChoice.skill}`) +
|
||||
` +1 (${actor.skills[skillCatId][newChoice.skill] - 1} -> ${
|
||||
actor.skills[skillCatId][newChoice.skill]
|
||||
` +1 (${actorData.skills[skillCatId][newChoice.skill] - 1} -> ${
|
||||
actorData.skills[skillCatId][newChoice.skill]
|
||||
})`;
|
||||
}
|
||||
|
||||
// Update Actor
|
||||
await this.actor.update({
|
||||
data: diffObject(this.actor.data.data, actor),
|
||||
await actor.update({
|
||||
data: foundry.utils.diffObject(actor.data.data, actorData),
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ import { ItemSheetL5r5e } from "./item-sheet.js";
|
||||
export class ArmorSheetL5r5e extends ItemSheetL5r5e {
|
||||
/** @override */
|
||||
static get defaultOptions() {
|
||||
return mergeObject(super.defaultOptions, {
|
||||
return foundry.utils.mergeObject(super.defaultOptions, {
|
||||
classes: ["l5r5e", "sheet", "armor"],
|
||||
template: CONFIG.l5r5e.paths.templates + "items/armor/armor-sheet.html",
|
||||
width: 520,
|
||||
|
||||
17
system/scripts/items/bond-sheet.js
Normal file
17
system/scripts/items/bond-sheet.js
Normal file
@@ -0,0 +1,17 @@
|
||||
import { ItemSheetL5r5e } from "./item-sheet.js";
|
||||
|
||||
/**
|
||||
* @extends {ItemSheet}
|
||||
*/
|
||||
export class BondSheetL5r5e extends ItemSheetL5r5e {
|
||||
/** @override */
|
||||
static get defaultOptions() {
|
||||
return foundry.utils.mergeObject(super.defaultOptions, {
|
||||
classes: ["l5r5e", "sheet", "bond"],
|
||||
template: CONFIG.l5r5e.paths.templates + "items/bond/bond-sheet.html",
|
||||
width: 520,
|
||||
height: 480,
|
||||
tabs: [{ navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "description" }],
|
||||
});
|
||||
}
|
||||
}
|
||||
131
system/scripts/items/item-pattern-sheet.js
Normal file
131
system/scripts/items/item-pattern-sheet.js
Normal file
@@ -0,0 +1,131 @@
|
||||
import { ItemSheetL5r5e } from "./item-sheet.js";
|
||||
|
||||
/**
|
||||
* @extends {ItemSheet}
|
||||
*/
|
||||
export class ItemPatternSheetL5r5e extends ItemSheetL5r5e {
|
||||
/** @override */
|
||||
static get defaultOptions() {
|
||||
return foundry.utils.mergeObject(super.defaultOptions, {
|
||||
classes: ["l5r5e", "sheet", "item-pattern"],
|
||||
template: CONFIG.l5r5e.paths.templates + "items/item-pattern/item-pattern-sheet.html",
|
||||
width: 520,
|
||||
height: 480,
|
||||
tabs: [{ navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "description" }],
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* @return {Object|Promise}
|
||||
*/
|
||||
async getData(options = {}) {
|
||||
const sheetData = await super.getData(options);
|
||||
|
||||
// Linked Property
|
||||
sheetData.data.linkedProperty = await this.getLinkedProperty(sheetData);
|
||||
|
||||
return sheetData;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the linked property name
|
||||
* @param sheetData
|
||||
* @return {Promise<null|{name, id}>}
|
||||
*/
|
||||
async getLinkedProperty(sheetData) {
|
||||
if (sheetData.data.data.linked_property_id) {
|
||||
const linkedProperty = await game.l5r5e.HelpersL5r5e.getObjectGameOrPack({
|
||||
id: sheetData.data.data.linked_property_id,
|
||||
type: "Item",
|
||||
});
|
||||
if (linkedProperty) {
|
||||
return {
|
||||
id: linkedProperty.data._id,
|
||||
name: linkedProperty.data.name,
|
||||
};
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Subscribe to events from the sheet.
|
||||
* @param {jQuery} html HTML content of the sheet.
|
||||
*/
|
||||
activateListeners(html) {
|
||||
super.activateListeners(html);
|
||||
|
||||
// Everything below here is only needed if the sheet is editable
|
||||
if (!this.options.editable) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Delete the linked property
|
||||
html.find(`.linked-property-delete`).on("click", this._deleteLinkedProperty.bind(this));
|
||||
}
|
||||
|
||||
/**
|
||||
* Callback actions which occur when a dragged element is dropped on a target.
|
||||
* @param {DragEvent} event The originating DragEvent
|
||||
* @private
|
||||
*/
|
||||
async _onDrop(event) {
|
||||
// Everything below here is only needed if the sheet is editable
|
||||
if (!this.options.editable) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Only property allowed here
|
||||
let item = await game.l5r5e.HelpersL5r5e.getDragnDropTargetObject(event);
|
||||
if (!item || item.documentName !== "Item" || item.data.type !== "property") {
|
||||
return;
|
||||
}
|
||||
|
||||
// Set the new property, and update
|
||||
this.document.data.data.linked_property_id = item.id;
|
||||
this.document.update({
|
||||
data: {
|
||||
linked_property_id: this.document.data.data.linked_property_id,
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the link to a property for the current item
|
||||
* @param {Event} event
|
||||
* @return {Promise<void>}
|
||||
* @private
|
||||
*/
|
||||
async _deleteLinkedProperty(event) {
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
|
||||
let name;
|
||||
const linkedProperty = await game.l5r5e.HelpersL5r5e.getObjectGameOrPack({
|
||||
id: this.document.data.data.linked_property_id,
|
||||
type: "Item",
|
||||
});
|
||||
if (linkedProperty) {
|
||||
name = linkedProperty.data.name;
|
||||
}
|
||||
|
||||
const callback = async () => {
|
||||
this.document.data.data.linked_property_id = null;
|
||||
this.document.update({
|
||||
data: {
|
||||
linked_property_id: this.document.data.data.linked_property_id,
|
||||
},
|
||||
});
|
||||
};
|
||||
|
||||
// Holing Ctrl = without confirm
|
||||
if (event.ctrlKey || !name) {
|
||||
return callback();
|
||||
}
|
||||
|
||||
game.l5r5e.HelpersL5r5e.confirmDeleteDialog(
|
||||
game.i18n.format("l5r5e.global.delete_confirm", { name }),
|
||||
callback
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -5,7 +5,7 @@
|
||||
export class ItemSheetL5r5e extends ItemSheet {
|
||||
/** @override */
|
||||
static get defaultOptions() {
|
||||
return mergeObject(super.defaultOptions, {
|
||||
return foundry.utils.mergeObject(super.defaultOptions, {
|
||||
classes: ["l5r5e", "sheet", "item"],
|
||||
template: CONFIG.l5r5e.paths.templates + "items/item/item-sheet.html",
|
||||
width: 520,
|
||||
@@ -14,13 +14,14 @@ export class ItemSheetL5r5e extends ItemSheet {
|
||||
});
|
||||
}
|
||||
|
||||
/** @override */
|
||||
async getData() {
|
||||
const sheetData = super.getData();
|
||||
/**
|
||||
* @return {Object|Promise}
|
||||
*/
|
||||
async getData(options = {}) {
|
||||
const sheetData = await super.getData(options);
|
||||
|
||||
sheetData.data.dtypes = ["String", "Number", "Boolean"];
|
||||
sheetData.data.ringsList = game.l5r5e.HelpersL5r5e.getRingsList();
|
||||
sheetData.data.techniquesList = game.l5r5e.HelpersL5r5e.getTechniquesList();
|
||||
|
||||
// Prepare Properties (id/name => object)
|
||||
await this._prepareProperties(sheetData);
|
||||
@@ -35,16 +36,16 @@ export class ItemSheetL5r5e extends ItemSheet {
|
||||
async _prepareProperties(sheetData) {
|
||||
sheetData.data.propertiesList = [];
|
||||
|
||||
if (Array.isArray(sheetData.data.properties)) {
|
||||
if (Array.isArray(sheetData.data.data.properties)) {
|
||||
const props = [];
|
||||
for (const property of sheetData.data.properties) {
|
||||
const gameProp = await game.l5r5e.HelpersL5r5e.getObjectGameOrPack(property.id, "Item");
|
||||
for (const property of sheetData.data.data.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 });
|
||||
props.push({ id: gameProp.id, name: gameProp.name });
|
||||
}
|
||||
}
|
||||
sheetData.data.properties = props;
|
||||
sheetData.data.data.properties = props;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -71,6 +72,9 @@ export class ItemSheetL5r5e extends ItemSheet {
|
||||
*/
|
||||
async _updateObject(event, formData) {
|
||||
if (formData["data.description"]) {
|
||||
// Base links (Journal, compendiums...)
|
||||
formData["data.description"] = TextEditor.enrichHTML(formData["data.description"]);
|
||||
// L5R Symbols
|
||||
formData["data.description"] = game.l5r5e.HelpersL5r5e.convertSymbols(formData["data.description"], true);
|
||||
}
|
||||
return super._updateObject(event, formData);
|
||||
@@ -78,19 +82,14 @@ export class ItemSheetL5r5e extends ItemSheet {
|
||||
|
||||
/**
|
||||
* Subscribe to events from the sheet.
|
||||
* @param html HTML content of the sheet.
|
||||
* @param {jQuery} html HTML content of the sheet.
|
||||
* @override
|
||||
*/
|
||||
activateListeners(html) {
|
||||
super.activateListeners(html);
|
||||
|
||||
// Toggle
|
||||
html.find(".toggle-on-click").on("click", (event) => {
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
const elmt = $(event.currentTarget).data("toggle");
|
||||
const tgt = html.find("." + elmt);
|
||||
tgt.toggleClass("toggle-active");
|
||||
});
|
||||
// Commons
|
||||
game.l5r5e.HelpersL5r5e.commonListeners(html);
|
||||
|
||||
// Everything below here is only needed if the sheet is editable
|
||||
if (!this.options.editable) {
|
||||
@@ -105,17 +104,12 @@ export class ItemSheetL5r5e extends ItemSheet {
|
||||
});
|
||||
|
||||
// Delete a property
|
||||
html.find(`.property-delete`).on("click", (event) => {
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
const li = $(event.currentTarget).parents(".property");
|
||||
this._deleteProperty(li.data("propertyId"));
|
||||
});
|
||||
html.find(`.property-delete`).on("click", this._deleteProperty.bind(this));
|
||||
}
|
||||
|
||||
/**
|
||||
* Create drag-and-drop workflow handlers for this Application
|
||||
* @return An array of DragDrop handlers
|
||||
* @return {DragDrop[]} An array of DragDrop handlers
|
||||
*/
|
||||
_createDragDropHandlers() {
|
||||
return [
|
||||
@@ -139,8 +133,21 @@ export class ItemSheetL5r5e extends ItemSheet {
|
||||
}
|
||||
|
||||
// Check item type and subtype
|
||||
const item = await game.l5r5e.HelpersL5r5e.getDragnDropTargetObject(event);
|
||||
if (!item || item.entity !== "Item" || item.data.type !== "property" || this.item.type === "property") {
|
||||
let item = await game.l5r5e.HelpersL5r5e.getDragnDropTargetObject(event);
|
||||
if (!item || item.documentName !== "Item" || this.item.type === "property") {
|
||||
return;
|
||||
}
|
||||
|
||||
// Specific ItemPattern's drop, get the associated props instead
|
||||
if (item.data.type === "item_pattern" && item.data.data.linked_property_id) {
|
||||
item = await game.l5r5e.HelpersL5r5e.getObjectGameOrPack({
|
||||
id: item.data.data.linked_property_id,
|
||||
type: "Item",
|
||||
});
|
||||
}
|
||||
|
||||
// Final object has to be a property
|
||||
if (item.data.type !== "property") {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -150,44 +157,120 @@ export class ItemSheetL5r5e extends ItemSheet {
|
||||
|
||||
/**
|
||||
* Add a property to the current item
|
||||
* @param {Item} item
|
||||
* @private
|
||||
*/
|
||||
_addProperty(item) {
|
||||
if (!Array.isArray(this.entity.data.data.properties)) {
|
||||
this.entity.data.data.properties = [];
|
||||
if (!Array.isArray(this.document.data.data.properties)) {
|
||||
this.document.data.data.properties = [];
|
||||
}
|
||||
|
||||
if (this.entity.data.data.properties.findIndex((p) => p.id === item.id) !== -1) {
|
||||
if (this.document.data.data.properties.findIndex((p) => p.id === item.id) !== -1) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.entity.data.data.properties.push({ id: item.id, name: item.name });
|
||||
this.document.data.data.properties.push({ id: item.id, name: item.name });
|
||||
|
||||
this.entity.update({
|
||||
this.document.update({
|
||||
data: {
|
||||
properties: this.entity.data.data.properties,
|
||||
properties: this.document.data.data.properties,
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a property from the current item
|
||||
* @param {Event} event
|
||||
* @return {Promise<void>}
|
||||
* @private
|
||||
*/
|
||||
_deleteProperty(id) {
|
||||
if (
|
||||
!Array.isArray(this.entity.data.data.properties) ||
|
||||
this.entity.data.data.properties.findIndex((p) => p.id === id) === -1
|
||||
) {
|
||||
_deleteProperty(event) {
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
|
||||
if (!Array.isArray(this.document.data.data.properties)) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.entity.data.data.properties = this.entity.data.data.properties.filter((p) => p.id !== id);
|
||||
const id = $(event.currentTarget).parents(".property").data("propertyId");
|
||||
const tmpProps = this.document.data.data.properties.find((p) => p.id === id);
|
||||
if (!tmpProps) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.entity.update({
|
||||
data: {
|
||||
properties: this.entity.data.data.properties,
|
||||
},
|
||||
});
|
||||
const callback = async () => {
|
||||
this.document.data.data.properties = this.document.data.data.properties.filter((p) => p.id !== id);
|
||||
this.document.update({
|
||||
data: {
|
||||
properties: this.document.data.data.properties,
|
||||
},
|
||||
});
|
||||
};
|
||||
|
||||
// Holing Ctrl = without confirm
|
||||
if (event.ctrlKey) {
|
||||
return callback();
|
||||
}
|
||||
|
||||
game.l5r5e.HelpersL5r5e.confirmDeleteDialog(
|
||||
game.i18n.format("l5r5e.global.delete_confirm", { name: tmpProps.name }),
|
||||
callback
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a embed item
|
||||
* @param {Event} event
|
||||
* @private
|
||||
*/
|
||||
_addSubItem(event) {
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
const itemId = $(event.currentTarget).data("item-id");
|
||||
console.warn("L5R5E | TODO ItemSheetL5r5e._addSubItem()", itemId); // TODO _addSubItem Currently not used, title override it
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a embed item
|
||||
* @param {Event} event
|
||||
* @private
|
||||
*/
|
||||
_editSubItem(event) {
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
const itemId = $(event.currentTarget).data("item-id");
|
||||
const item = this.document.items.get(itemId);
|
||||
if (item) {
|
||||
item.sheet.render(true);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a embed item
|
||||
* @param {Event} event
|
||||
* @private
|
||||
*/
|
||||
_deleteSubItem(event) {
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
const itemId = $(event.currentTarget).data("item-id");
|
||||
const item = this.document.getEmbedItem(itemId);
|
||||
if (!item) {
|
||||
return;
|
||||
}
|
||||
|
||||
const callback = async () => {
|
||||
this.document.deleteEmbedItem(itemId);
|
||||
};
|
||||
|
||||
// Holing Ctrl = without confirm
|
||||
if (event.ctrlKey) {
|
||||
return callback();
|
||||
}
|
||||
|
||||
game.l5r5e.HelpersL5r5e.confirmDeleteDialog(
|
||||
game.i18n.format("l5r5e.global.delete_confirm", { name: item.name }),
|
||||
callback
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,7 +12,7 @@ export class PeculiaritySheetL5r5e extends ItemSheetL5r5e {
|
||||
|
||||
/** @override */
|
||||
static get defaultOptions() {
|
||||
return mergeObject(super.defaultOptions, {
|
||||
return foundry.utils.mergeObject(super.defaultOptions, {
|
||||
classes: ["l5r5e", "sheet", "peculiarity"],
|
||||
template: CONFIG.l5r5e.paths.templates + "items/peculiarity/peculiarity-sheet.html",
|
||||
width: 520,
|
||||
@@ -21,8 +21,8 @@ export class PeculiaritySheetL5r5e extends ItemSheetL5r5e {
|
||||
});
|
||||
}
|
||||
|
||||
async getData() {
|
||||
const sheetData = await super.getData();
|
||||
async getData(options = {}) {
|
||||
const sheetData = await super.getData(options);
|
||||
|
||||
sheetData.data.subTypesList = PeculiaritySheetL5r5e.types.map((e) => ({
|
||||
id: e,
|
||||
|
||||
@@ -6,7 +6,7 @@ import { ItemSheetL5r5e } from "./item-sheet.js";
|
||||
export class PropertySheetL5r5e extends ItemSheetL5r5e {
|
||||
/** @override */
|
||||
static get defaultOptions() {
|
||||
return mergeObject(super.defaultOptions, {
|
||||
return foundry.utils.mergeObject(super.defaultOptions, {
|
||||
classes: ["l5r5e", "sheet", "property"],
|
||||
template: CONFIG.l5r5e.paths.templates + "items/property/property-sheet.html",
|
||||
width: 520,
|
||||
@@ -14,5 +14,11 @@ export class PropertySheetL5r5e extends ItemSheetL5r5e {
|
||||
tabs: [{ navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "description" }],
|
||||
});
|
||||
}
|
||||
// TODO certain propriétés en annule d'autres : aiguisé <-> abimé. voir comment faire.
|
||||
// TODO Some properties cancel others :
|
||||
// Concealable and Cumbersome
|
||||
// Ceremonial and Mundane
|
||||
// Damaged and Durable
|
||||
// Resplendent and Subtle
|
||||
// Subtle and Wargear
|
||||
// Sacred and Unholy
|
||||
}
|
||||
|
||||
17
system/scripts/items/signature-scroll-sheet.js
Normal file
17
system/scripts/items/signature-scroll-sheet.js
Normal file
@@ -0,0 +1,17 @@
|
||||
import { ItemSheetL5r5e } from "./item-sheet.js";
|
||||
|
||||
/**
|
||||
* @extends {ItemSheet}
|
||||
*/
|
||||
export class SignatureScrollSheetL5r5e extends ItemSheetL5r5e {
|
||||
/** @override */
|
||||
static get defaultOptions() {
|
||||
return foundry.utils.mergeObject(super.defaultOptions, {
|
||||
classes: ["l5r5e", "sheet", "signature-scroll"],
|
||||
template: CONFIG.l5r5e.paths.templates + "items/signature-scroll/signature-scroll-sheet.html",
|
||||
width: 520,
|
||||
height: 480,
|
||||
tabs: [{ navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "description" }],
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -6,7 +6,7 @@ import { ItemSheetL5r5e } from "./item-sheet.js";
|
||||
export class TechniqueSheetL5r5e extends ItemSheetL5r5e {
|
||||
/** @override */
|
||||
static get defaultOptions() {
|
||||
return mergeObject(super.defaultOptions, {
|
||||
return foundry.utils.mergeObject(super.defaultOptions, {
|
||||
classes: ["l5r5e", "sheet", "technique"],
|
||||
template: CONFIG.l5r5e.paths.templates + "items/technique/technique-sheet.html",
|
||||
width: 520,
|
||||
@@ -16,16 +16,15 @@ export class TechniqueSheetL5r5e extends ItemSheetL5r5e {
|
||||
}
|
||||
|
||||
/** @override */
|
||||
async getData() {
|
||||
const sheetData = await super.getData();
|
||||
async getData(options = {}) {
|
||||
const sheetData = await super.getData(options);
|
||||
|
||||
// Add "school ability" and "mastery ability"
|
||||
CONFIG.l5r5e.techniques_school.forEach((e) => {
|
||||
sheetData.data.techniquesList.push({
|
||||
id: e,
|
||||
label: game.i18n.localize(`l5r5e.techniques.${e}`),
|
||||
});
|
||||
});
|
||||
// List all available techniques type
|
||||
const types = ["core", "school", "title"];
|
||||
if (game.settings.get("l5r5e", "techniques-customs")) {
|
||||
types.push("custom");
|
||||
}
|
||||
sheetData.data.techniquesList = game.l5r5e.HelpersL5r5e.getTechniquesList({ types });
|
||||
|
||||
return sheetData;
|
||||
}
|
||||
|
||||
152
system/scripts/items/title-sheet.js
Normal file
152
system/scripts/items/title-sheet.js
Normal file
@@ -0,0 +1,152 @@
|
||||
import { ItemSheetL5r5e } from "./item-sheet.js";
|
||||
|
||||
/**
|
||||
* @extends {ItemSheet}
|
||||
*/
|
||||
export class TitleSheetL5r5e extends ItemSheetL5r5e {
|
||||
/** @override */
|
||||
static get defaultOptions() {
|
||||
return foundry.utils.mergeObject(super.defaultOptions, {
|
||||
classes: ["l5r5e", "sheet", "title"],
|
||||
template: CONFIG.l5r5e.paths.templates + "items/title/title-sheet.html",
|
||||
width: 520,
|
||||
height: 480,
|
||||
tabs: [{ navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "description" }],
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* @return {Object|Promise}
|
||||
*/
|
||||
async getData(options = {}) {
|
||||
const sheetData = await super.getData(options);
|
||||
|
||||
// Prepare OwnedItems
|
||||
sheetData.data.embedItemsList = this._prepareEmbedItems(sheetData.data.data.items);
|
||||
|
||||
// Automatically compute the total xp cost (full price) and XP in title (cursus, some halved prices)
|
||||
const { xp_used_total, xp_used } = game.l5r5e.HelpersL5r5e.getItemsXpCost(sheetData.data.embedItemsList);
|
||||
sheetData.data.data.xp_used_total = xp_used_total;
|
||||
sheetData.data.data.xp_used = xp_used;
|
||||
|
||||
return sheetData;
|
||||
}
|
||||
|
||||
/**
|
||||
* Prepare Embed items
|
||||
* @param {[]|Map} itemsMap
|
||||
* @return {[]}
|
||||
* @private
|
||||
*/
|
||||
_prepareEmbedItems(itemsMap) {
|
||||
let itemsList = itemsMap;
|
||||
if (itemsMap instanceof Map) {
|
||||
itemsList = Array.from(itemsMap).map(([id, item]) => item.data);
|
||||
}
|
||||
|
||||
// Sort by rank desc
|
||||
itemsList.sort((a, b) => (b.data.rank || 0) - (a.data.rank || 0));
|
||||
|
||||
return itemsList;
|
||||
}
|
||||
|
||||
/**
|
||||
* Callback actions which occur when a dragged element is dropped on a target.
|
||||
* @param {DragEvent} event The originating DragEvent
|
||||
* @private
|
||||
*/
|
||||
async _onDrop(event) {
|
||||
// Everything below here is only needed if the sheet is editable
|
||||
if (!this.options.editable) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Check item type and subtype
|
||||
let item = await game.l5r5e.HelpersL5r5e.getDragnDropTargetObject(event);
|
||||
if (!item || item.documentName !== "Item" || !["technique", "advancement"].includes(item.data.type)) {
|
||||
return;
|
||||
}
|
||||
|
||||
const data = item.data.toObject(false);
|
||||
|
||||
// Check xp for techs
|
||||
if (item.data.type === "technique") {
|
||||
data.data.xp_cost = data.data.xp_cost > 0 ? data.data.xp_cost : CONFIG.l5r5e.xp.techniqueCost;
|
||||
data.data.xp_used = data.data.xp_cost;
|
||||
}
|
||||
|
||||
this.document.addEmbedItem(data);
|
||||
}
|
||||
|
||||
/**
|
||||
* Subscribe to events from the sheet.
|
||||
* @param {jQuery} html HTML content of the sheet.
|
||||
*/
|
||||
activateListeners(html) {
|
||||
super.activateListeners(html);
|
||||
|
||||
// Everything below here is only needed if the sheet is editable
|
||||
if (!this.options.editable) {
|
||||
return;
|
||||
}
|
||||
|
||||
// *** Sub-Items management ***
|
||||
html.find(".item-add").on("click", this._addSubItem.bind(this));
|
||||
html.find(`.item-edit`).on("click", this._editSubItem.bind(this));
|
||||
html.find(`.item-delete`).on("click", this._deleteSubItem.bind(this));
|
||||
html.find(`.item-curriculum`).on("click", this._switchSubItemCurriculum.bind(this));
|
||||
}
|
||||
|
||||
/**
|
||||
* Display a dialog to choose what Item to add, and add it on this Item
|
||||
* @param {Event} event
|
||||
* @return {Promise<void>}
|
||||
* @private
|
||||
*/
|
||||
async _addSubItem(event) {
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
|
||||
// Show Dialog
|
||||
const selectedType = await game.l5r5e.HelpersL5r5e.showSubItemDialog(["advancement", "technique"]);
|
||||
if (!selectedType) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Create the new Item
|
||||
const itemId = await this.document.addEmbedItem(
|
||||
new game.l5r5e.ItemL5r5e({
|
||||
name: game.i18n.localize(`ITEM.Type${selectedType.capitalize()}`),
|
||||
type: selectedType,
|
||||
img: `${CONFIG.l5r5e.paths.assets}icons/items/${selectedType}.svg`,
|
||||
})
|
||||
);
|
||||
|
||||
// Get the store object and display it
|
||||
const item = this.document.items.get(itemId);
|
||||
if (item) {
|
||||
item.sheet.render(true);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Toogle the curriculum for this embed item
|
||||
* @param {Event} event
|
||||
* @return {Promise<void>}
|
||||
* @private
|
||||
*/
|
||||
async _switchSubItemCurriculum(event) {
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
|
||||
const itemId = $(event.currentTarget).data("item-id");
|
||||
const item = this.document.getEmbedItem(itemId);
|
||||
if (!item) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Switch the state and update
|
||||
item.data.data.in_curriculum = !item.data.data.in_curriculum;
|
||||
return this.document.updateEmbedItem(item);
|
||||
}
|
||||
}
|
||||
@@ -6,7 +6,7 @@ import { ItemSheetL5r5e } from "./item-sheet.js";
|
||||
export class WeaponSheetL5r5e extends ItemSheetL5r5e {
|
||||
/** @override */
|
||||
static get defaultOptions() {
|
||||
return mergeObject(super.defaultOptions, {
|
||||
return foundry.utils.mergeObject(super.defaultOptions, {
|
||||
classes: ["l5r5e", "sheet", "weapon"],
|
||||
template: CONFIG.l5r5e.paths.templates + "items/weapon/weapon-sheet.html",
|
||||
width: 520,
|
||||
@@ -15,8 +15,8 @@ export class WeaponSheetL5r5e extends ItemSheetL5r5e {
|
||||
});
|
||||
}
|
||||
|
||||
async getData() {
|
||||
const sheetData = await super.getData();
|
||||
async getData(options = {}) {
|
||||
const sheetData = await super.getData(options);
|
||||
|
||||
// Martial skills only
|
||||
sheetData.data.skills = Array.from(CONFIG.l5r5e.skills)
|
||||
|
||||
@@ -31,4 +31,20 @@ export class BaseJournalSheetL5r5e extends JournalSheet {
|
||||
}
|
||||
return super._updateObject(event, formData);
|
||||
}
|
||||
|
||||
/**
|
||||
* Subscribe to events from the sheet.
|
||||
* @param {jQuery} html HTML content of the sheet.
|
||||
*/
|
||||
activateListeners(html) {
|
||||
super.activateListeners(html);
|
||||
|
||||
// Commons
|
||||
game.l5r5e.HelpersL5r5e.commonListeners(html);
|
||||
|
||||
// *** Everything below here is only needed if the sheet is editable ***
|
||||
// if (!this.options.editable) {
|
||||
// return;
|
||||
// }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,7 +19,7 @@ import { RollL5r5e } from "./dice/roll.js";
|
||||
import { DicePickerDialog } from "./dice/dice-picker-dialog.js";
|
||||
import { RollnKeepDialog } from "./dice/roll-n-keep-dialog.js";
|
||||
import { CombatL5r5e } from "./combat.js";
|
||||
import { GmToolsDialog } from "./dice/gm-tools-dialog.js";
|
||||
import { GmToolsDialog } from "./dialogs/gm-tools-dialog.js";
|
||||
// Items
|
||||
import { ItemL5r5e } from "./item.js";
|
||||
import { ItemSheetL5r5e } from "./items/item-sheet.js";
|
||||
@@ -29,6 +29,10 @@ import { TechniqueSheetL5r5e } from "./items/technique-sheet.js";
|
||||
import { PropertySheetL5r5e } from "./items/property-sheet.js";
|
||||
import { AdvancementSheetL5r5e } from "./items/advancement-sheet.js";
|
||||
import { PeculiaritySheetL5r5e } from "./items/peculiarity-sheet.js";
|
||||
import { TitleSheetL5r5e } from "./items/title-sheet.js";
|
||||
import { BondSheetL5r5e } from "./items/bond-sheet.js";
|
||||
import { SignatureScrollSheetL5r5e } from "./items/signature-scroll-sheet.js";
|
||||
import { ItemPatternSheetL5r5e } from "./items/item-pattern-sheet.js";
|
||||
// JournalEntry
|
||||
import { JournalL5r5e } from "./journal.js";
|
||||
import { BaseJournalSheetL5r5e } from "./journals/base-journal-sheet.js";
|
||||
@@ -54,20 +58,19 @@ Hooks.once("init", async () => {
|
||||
CONFIG.l5r5e = L5R5E;
|
||||
|
||||
// Assign custom classes and constants here
|
||||
CONFIG.Combat.entityClass = CombatL5r5e;
|
||||
CONFIG.Actor.entityClass = ActorL5r5e;
|
||||
CONFIG.Combat.documentClass = CombatL5r5e;
|
||||
CONFIG.Actor.documentClass = ActorL5r5e;
|
||||
CONFIG.Actor.sheetClasses = CharacterSheetL5r5e;
|
||||
CONFIG.Item.entityClass = ItemL5r5e;
|
||||
CONFIG.JournalEntry.entityClass = JournalL5r5e;
|
||||
CONFIG.Item.documentClass = ItemL5r5e;
|
||||
CONFIG.JournalEntry.documentClass = JournalL5r5e;
|
||||
CONFIG.JournalEntry.sheetClass = BaseJournalSheetL5r5e;
|
||||
|
||||
// Define custom Roll class
|
||||
CONFIG.Dice.rolls.push(CONFIG.Dice.rolls[0]);
|
||||
CONFIG.Dice.rolls[0] = RollL5r5e;
|
||||
CONFIG.Dice.rolls.unshift(RollL5r5e);
|
||||
|
||||
// Define DiceTerms
|
||||
CONFIG.Dice.terms["s"] = AbilityDie;
|
||||
CONFIG.Dice.terms["r"] = RingDie;
|
||||
CONFIG.Dice.terms[AbilityDie.DENOMINATION] = AbilityDie;
|
||||
CONFIG.Dice.terms[RingDie.DENOMINATION] = RingDie;
|
||||
|
||||
// Add some classes in game
|
||||
game.l5r5e = {
|
||||
@@ -75,6 +78,7 @@ Hooks.once("init", async () => {
|
||||
RingDie,
|
||||
AbilityDie,
|
||||
HelpersL5r5e,
|
||||
ItemL5r5e,
|
||||
RollL5r5e,
|
||||
DicePickerDialog,
|
||||
RollnKeepDialog,
|
||||
@@ -109,10 +113,48 @@ Hooks.once("init", async () => {
|
||||
Items.registerSheet("l5r5e", PropertySheetL5r5e, { types: ["property"], makeDefault: true });
|
||||
Items.registerSheet("l5r5e", PeculiaritySheetL5r5e, { types: ["peculiarity"], makeDefault: true });
|
||||
Items.registerSheet("l5r5e", AdvancementSheetL5r5e, { types: ["advancement"], makeDefault: true });
|
||||
Items.registerSheet("l5r5e", TitleSheetL5r5e, { types: ["title"], makeDefault: true });
|
||||
Items.registerSheet("l5r5e", BondSheetL5r5e, { types: ["bond"], makeDefault: true });
|
||||
Items.registerSheet("l5r5e", SignatureScrollSheetL5r5e, { types: ["signature_scroll"], makeDefault: true });
|
||||
Items.registerSheet("l5r5e", ItemPatternSheetL5r5e, { types: ["item_pattern"], makeDefault: true });
|
||||
|
||||
// Journal
|
||||
Items.unregisterSheet("core", JournalSheet);
|
||||
Items.registerSheet("l5r5e", BaseJournalSheetL5r5e, { makeDefault: true });
|
||||
|
||||
// Override the default Token _drawBar function to allow fatigue bar reversing.
|
||||
Token.prototype._drawBar = function (number, bar, data) {
|
||||
const reverseBar = data.attribute === "fatigue" && game.settings.get("l5r5e", "token-reverseFatigueBar");
|
||||
|
||||
// Bar value
|
||||
const pct = Math.clamped(Number(data.value), 0, data.max) / data.max;
|
||||
|
||||
// Modify color
|
||||
let color = number === 0 ? [pct / 1.2, 1 - pct, 0] : [0.5 * pct, 0.7 * pct, 0.5 + pct / 2];
|
||||
|
||||
// Red if compromised
|
||||
if (data.attribute === "strife" && data.value > data.max) {
|
||||
color = [1, 0.1, 0.1];
|
||||
}
|
||||
|
||||
// Enlarge the bar for large tokens
|
||||
let h = Math.max(canvas.dimensions.size / 12, 8);
|
||||
if (this.data.height >= 2) {
|
||||
h *= 1.6;
|
||||
}
|
||||
|
||||
// Draw the bar
|
||||
bar.clear()
|
||||
.beginFill(0x000000, 0.5)
|
||||
.lineStyle(2, 0x000000, 0.9)
|
||||
.drawRoundedRect(0, 0, this.w, h, 3)
|
||||
.beginFill(PIXI.utils.rgb2hex(color), 0.8)
|
||||
.lineStyle(1, 0x000000, 0.8)
|
||||
.drawRoundedRect(1, 1, (reverseBar ? 1 - pct : pct) * (this.w - 2), h - 2, 2);
|
||||
|
||||
// Set position
|
||||
bar.position.set(0, number === 0 ? this.h - h : 0);
|
||||
};
|
||||
});
|
||||
|
||||
/* ------------------------------------ */
|
||||
@@ -129,3 +171,7 @@ Hooks.on("renderSidebarTab", (app, html, data) => HooksL5r5e.renderSidebarTab(ap
|
||||
Hooks.on("renderChatMessage", (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));
|
||||
Hooks.on("preCreateChatMessage", (document, data, options, userId) =>
|
||||
HooksL5r5e.preCreateChatMessage(document, data, options, userId)
|
||||
);
|
||||
|
||||
@@ -3,18 +3,19 @@
|
||||
*/
|
||||
export class MigrationL5r5e {
|
||||
/**
|
||||
* Version needed for migration stuff to trigger
|
||||
* Minimum Version needed for migration stuff to trigger
|
||||
* @type {string}
|
||||
*/
|
||||
static NEEDED_VERSION = "1.1.0";
|
||||
static NEEDED_VERSION = "1.3.0";
|
||||
|
||||
/**
|
||||
* Return true if the current world need some updates
|
||||
* @returns {boolean}
|
||||
* Return true if the version need some updates
|
||||
* @param {string} version
|
||||
* @return {boolean}
|
||||
*/
|
||||
static needUpdate() {
|
||||
static needUpdate(version) {
|
||||
const currentVersion = game.settings.get("l5r5e", "systemMigrationVersion");
|
||||
return currentVersion && isNewerVersion(MigrationL5r5e.NEEDED_VERSION, currentVersion);
|
||||
return currentVersion && foundry.utils.isNewerVersion(version, currentVersion);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -26,6 +27,11 @@ export class MigrationL5r5e {
|
||||
return;
|
||||
}
|
||||
|
||||
// if (MigrationL5r5e.needUpdate("1.3.0")) {
|
||||
// ChatMessage.create({"content": "<strong>L5R5E v1.3.0 :</strong><br>"});
|
||||
// }
|
||||
|
||||
// Warn the users
|
||||
ui.notifications.info(
|
||||
`Applying L5R5e System Migration for version ${game.system.data.version}.` +
|
||||
` Please be patient and do not close your game or shut down your server.`,
|
||||
@@ -33,56 +39,67 @@ export class MigrationL5r5e {
|
||||
);
|
||||
|
||||
// Migrate World Actors
|
||||
for (let a of game.actors.entities) {
|
||||
for (let actor of game.actors.contents) {
|
||||
try {
|
||||
const updateData = MigrationL5r5e._migrateActorData(a.data);
|
||||
if (!isObjectEmpty(updateData)) {
|
||||
console.log(`Migrating Actor entity ${a.name}`);
|
||||
await a.update(updateData, { enforceTypes: false });
|
||||
const updateData = MigrationL5r5e._migrateActorData(actor.data);
|
||||
if (!foundry.utils.isObjectEmpty(updateData)) {
|
||||
console.log(`L5R5E | Migrating Actor entity ${actor.name}`);
|
||||
await actor.update(updateData);
|
||||
}
|
||||
} catch (err) {
|
||||
err.message = `Failed L5R5e system migration for Actor ${a.name}: ${err.message}`;
|
||||
err.message = `L5R5E | Failed L5R5e system migration for Actor ${actor.name}: ${err.message}`;
|
||||
console.error(err);
|
||||
}
|
||||
}
|
||||
|
||||
// Migrate World Items
|
||||
for (let i of game.items.entities) {
|
||||
for (let item of game.items.contents) {
|
||||
try {
|
||||
const updateData = MigrationL5r5e._migrateItemData(i.data);
|
||||
if (!isObjectEmpty(updateData)) {
|
||||
console.log(`Migrating Item entity ${i.name}`);
|
||||
await i.update(updateData, { enforceTypes: false });
|
||||
const updateData = MigrationL5r5e._migrateItemData(item.data);
|
||||
if (!foundry.utils.isObjectEmpty(updateData)) {
|
||||
console.log(`L5R5E | Migrating Item entity ${item.name}`);
|
||||
await item.update(updateData);
|
||||
}
|
||||
} catch (err) {
|
||||
err.message = `Failed L5R5e system migration for Item ${i.name}: ${err.message}`;
|
||||
err.message = `L5R5E | Failed L5R5e system migration for Item ${item.name}: ${err.message}`;
|
||||
console.error(err);
|
||||
}
|
||||
}
|
||||
|
||||
// Migrate Actor Override Tokens
|
||||
for (let s of game.scenes.entities) {
|
||||
for (let scene of game.scenes.contents) {
|
||||
try {
|
||||
const updateData = MigrationL5r5e._migrateSceneData(s.data);
|
||||
if (!isObjectEmpty(updateData)) {
|
||||
console.log(`Migrating Scene entity ${s.name}`);
|
||||
await s.update(updateData, { enforceTypes: false });
|
||||
const updateData = MigrationL5r5e._migrateSceneData(scene.data);
|
||||
if (!foundry.utils.isObjectEmpty(updateData)) {
|
||||
console.log(`L5R5E | Migrating Scene entity ${scene.name}`);
|
||||
await scene.update(updateData);
|
||||
}
|
||||
} catch (err) {
|
||||
err.message = `Failed L5R5e system migration for Scene ${s.name}: ${err.message}`;
|
||||
err.message = `L5R5E | Failed L5R5e system migration for Scene ${scene.name}: ${err.message}`;
|
||||
console.error(err);
|
||||
}
|
||||
}
|
||||
|
||||
// Migrate World Compendium Packs
|
||||
for (let p of game.packs) {
|
||||
if (p.metadata.package !== "world") {
|
||||
for (let pack of game.packs) {
|
||||
if (pack.metadata.package !== "world" || !["Actor", "Item", "Scene"].includes(pack.metadata.entity)) {
|
||||
continue;
|
||||
}
|
||||
if (!["Actor", "Item", "Scene"].includes(p.metadata.entity)) {
|
||||
continue;
|
||||
await MigrationL5r5e._migrateCompendium(pack);
|
||||
}
|
||||
|
||||
// Migrate ChatMessages
|
||||
for (let message of game.collections.get("ChatMessage")) {
|
||||
try {
|
||||
const updateData = MigrationL5r5e._migrateChatMessage(message.data);
|
||||
if (!foundry.utils.isObjectEmpty(updateData)) {
|
||||
console.log(`L5R5E | Migrating ChatMessage entity ${message.id}`);
|
||||
await message.update(updateData);
|
||||
}
|
||||
} catch (err) {
|
||||
err.message = `L5R5E | Failed L5R5e system migration for Scene ${message.id}: ${err.message}`;
|
||||
console.error(err);
|
||||
}
|
||||
await MigrationL5r5e._migrateCompendium(p);
|
||||
}
|
||||
|
||||
// Set the migration as complete
|
||||
@@ -94,7 +111,7 @@ export class MigrationL5r5e {
|
||||
|
||||
/**
|
||||
* Apply migration rules to all Entities within a single Compendium pack
|
||||
* @param pack
|
||||
* @param {Compendium} pack
|
||||
* @return {Promise}
|
||||
*/
|
||||
static async _migrateCompendium(pack) {
|
||||
@@ -103,18 +120,20 @@ export class MigrationL5r5e {
|
||||
return;
|
||||
}
|
||||
|
||||
// Unlock the pack for editing
|
||||
const wasLocked = pack.locked;
|
||||
await pack.configure({ locked: false });
|
||||
try {
|
||||
// Unlock the pack for editing
|
||||
await pack.configure({ locked: false });
|
||||
|
||||
// Begin by requesting server-side data model migration and get the migrated content
|
||||
await pack.migrate();
|
||||
const content = await pack.getContent();
|
||||
// Begin by requesting server-side data model migration and get the migrated content
|
||||
await pack.migrate();
|
||||
const documents = await pack.getDocuments();
|
||||
|
||||
// Iterate over compendium entries - applying fine-tuned migration functions
|
||||
const updateDatasList = [];
|
||||
for (let ent of documents) {
|
||||
let updateData = {};
|
||||
|
||||
// Iterate over compendium entries - applying fine-tuned migration functions
|
||||
for (let ent of content) {
|
||||
let updateData = {};
|
||||
try {
|
||||
switch (entity) {
|
||||
case "Actor":
|
||||
updateData = MigrationL5r5e._migrateActorData(ent.data);
|
||||
@@ -126,24 +145,30 @@ export class MigrationL5r5e {
|
||||
updateData = MigrationL5r5e._migrateSceneData(ent.data);
|
||||
break;
|
||||
}
|
||||
if (isObjectEmpty(updateData)) {
|
||||
if (foundry.utils.isObjectEmpty(updateData)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Save the entry, if data was changed
|
||||
updateData["_id"] = ent._id;
|
||||
await pack.updateEntity(updateData);
|
||||
console.log(`Migrated ${entity} entity ${ent.name} in Compendium ${pack.collection}`);
|
||||
} catch (err) {
|
||||
// Handle migration failures
|
||||
err.message = `Failed L5R5e system migration for entity ${ent.name} in pack ${pack.collection}: ${err.message}`;
|
||||
console.error(err);
|
||||
// Add the entry, if data was changed
|
||||
updateData["_id"] = ent.data._id;
|
||||
updateDatasList.push(updateData);
|
||||
|
||||
console.log(`L5R5E | Migrating ${entity} entity ${ent.name} in Compendium ${pack.collection}`);
|
||||
}
|
||||
|
||||
// Save the modified entries
|
||||
if (updateDatasList.length > 0) {
|
||||
await pack.documentClass.updateDocuments(updateDatasList, { pack: pack.collection });
|
||||
}
|
||||
} catch (err) {
|
||||
// Handle migration failures
|
||||
err.message = `L5R5E | Failed system migration for entities ${entity} in pack ${pack.collection}: ${err.message}`;
|
||||
console.error(err);
|
||||
}
|
||||
|
||||
// Apply the original locked status for the pack
|
||||
pack.configure({ locked: wasLocked });
|
||||
console.log(`Migrated all ${entity} entities from Compendium ${pack.collection}`);
|
||||
console.log(`L5R5E | Migrated all ${entity} contents from Compendium ${pack.collection}`);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -153,7 +178,7 @@ export class MigrationL5r5e {
|
||||
* @return {Object} The updateData to apply
|
||||
*/
|
||||
static _migrateSceneData(scene) {
|
||||
const tokens = duplicate(scene.tokens);
|
||||
const tokens = foundry.utils.duplicate(scene.tokens);
|
||||
return {
|
||||
tokens: tokens.map((t) => {
|
||||
if (!t.actorId || t.actorLink || !t.actorData.data) {
|
||||
@@ -166,7 +191,7 @@ export class MigrationL5r5e {
|
||||
t.actorData = {};
|
||||
} else if (!t.actorLink) {
|
||||
const updateData = MigrationL5r5e._migrateActorData(token.data.actorData);
|
||||
t.actorData = mergeObject(token.data.actorData, updateData);
|
||||
t.actorData = foundry.utils.mergeObject(token.data.actorData, updateData);
|
||||
}
|
||||
return t;
|
||||
}),
|
||||
@@ -184,24 +209,45 @@ export class MigrationL5r5e {
|
||||
const actorData = actor.data;
|
||||
|
||||
// ***** Start of 1.1.0 *****
|
||||
// Add "Prepared" in actor
|
||||
if (actorData.prepared === undefined) {
|
||||
updateData["data.prepared"] = true;
|
||||
}
|
||||
if (MigrationL5r5e.needUpdate("1.1.0")) {
|
||||
// Add "Prepared" in actor
|
||||
if (actorData.prepared === undefined) {
|
||||
updateData["data.prepared"] = true;
|
||||
}
|
||||
|
||||
// NPC are now without autostats, we need to save the value
|
||||
if (actor.type === "npc") {
|
||||
if (actorData.endurance < 1) {
|
||||
updateData["data.endurance"] = (Number(actorData.rings.earth) + Number(actorData.rings.fire)) * 2;
|
||||
updateData["data.composure"] = (Number(actorData.rings.earth) + Number(actorData.rings.water)) * 2;
|
||||
updateData["data.focus"] = Number(actorData.rings.air) + Number(actorData.rings.fire);
|
||||
updateData["data.vigilance"] = Math.ceil(
|
||||
(Number(actorData.rings.air) + Number(actorData.rings.water)) / 2
|
||||
);
|
||||
// NPC are now without autostats, we need to save the value
|
||||
if (actor.type === "npc") {
|
||||
if (actorData.endurance < 1) {
|
||||
updateData["data.endurance"] = (Number(actorData.rings.earth) + Number(actorData.rings.fire)) * 2;
|
||||
updateData["data.composure"] = (Number(actorData.rings.earth) + Number(actorData.rings.water)) * 2;
|
||||
updateData["data.focus"] = Number(actorData.rings.air) + Number(actorData.rings.fire);
|
||||
updateData["data.vigilance"] = Math.ceil(
|
||||
(Number(actorData.rings.air) + Number(actorData.rings.water)) / 2
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
// ***** End of 1.1.0 *****
|
||||
|
||||
// ***** Start of 1.3.0 *****
|
||||
if (MigrationL5r5e.needUpdate("1.3.0")) {
|
||||
// PC/NPC removed notes useless props "value"
|
||||
updateData["data.notes"] = actorData.notes.value;
|
||||
|
||||
// NPC have now more thant a Strength and a Weakness
|
||||
if (actor.type === "npc" && actorData.rings_affinities) {
|
||||
updateData["data.rings_affinities." + actorData.rings_affinities.strength.ring] =
|
||||
actorData.rings_affinities.strength.value;
|
||||
updateData["data.rings_affinities." + actorData.rings_affinities.weakness.ring] =
|
||||
actorData.rings_affinities.weakness.value;
|
||||
|
||||
// Delete old keys : not working :'(
|
||||
updateData["-=data.rings_affinities.strength"] = null;
|
||||
updateData["-=data.rings_affinities.weakness"] = null;
|
||||
}
|
||||
}
|
||||
// ***** End of 1.3.0 *****
|
||||
|
||||
return updateData;
|
||||
}
|
||||
|
||||
@@ -212,7 +258,7 @@ export class MigrationL5r5e {
|
||||
*/
|
||||
static cleanActorData(actorData) {
|
||||
const model = game.system.model.Actor[actorData.type];
|
||||
actorData.data = filterObject(actorData.data, model);
|
||||
actorData.data = foundry.utils.filterObject(actorData.data, model);
|
||||
return actorData;
|
||||
}
|
||||
|
||||
@@ -224,4 +270,22 @@ export class MigrationL5r5e {
|
||||
// Nothing for now
|
||||
return {};
|
||||
}
|
||||
|
||||
/**
|
||||
* Migrate a single Item entity to incorporate latest data model changes
|
||||
* @param {ChatMessageData} message
|
||||
*/
|
||||
static _migrateChatMessage(message) {
|
||||
const updateData = {};
|
||||
|
||||
// ***** Start of 1.3.0 *****
|
||||
if (MigrationL5r5e.needUpdate("1.3.0")) {
|
||||
// Old chat messages have a "0" in content, in foundry 0.8+ the roll content is generated only if content is null
|
||||
if (message.content === "0") {
|
||||
updateData["content"] = "";
|
||||
}
|
||||
}
|
||||
|
||||
return updateData;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,53 +1,61 @@
|
||||
export const PreloadTemplates = async function () {
|
||||
const templatePaths = [
|
||||
const tpl = CONFIG.l5r5e.paths.templates;
|
||||
return loadTemplates([
|
||||
// Add paths to "systems/l5r5e/templates"
|
||||
// actors
|
||||
"systems/l5r5e/templates/actors/character/rings.html",
|
||||
"systems/l5r5e/templates/actors/character/narrative.html",
|
||||
"systems/l5r5e/templates/actors/character/identity.html",
|
||||
"systems/l5r5e/templates/actors/character/category.html",
|
||||
"systems/l5r5e/templates/actors/character/skill.html",
|
||||
"systems/l5r5e/templates/actors/character/social.html",
|
||||
"systems/l5r5e/templates/actors/character/attributes.html",
|
||||
"systems/l5r5e/templates/actors/character/conflict.html",
|
||||
"systems/l5r5e/templates/actors/character/stance.html",
|
||||
"systems/l5r5e/templates/actors/character/techniques.html",
|
||||
"systems/l5r5e/templates/actors/character/experience.html",
|
||||
"systems/l5r5e/templates/actors/character/advancement.html",
|
||||
"systems/l5r5e/templates/actors/character/twenty-questions-item.html",
|
||||
// npc
|
||||
"systems/l5r5e/templates/actors/npc/identity.html",
|
||||
"systems/l5r5e/templates/actors/npc/narrative.html",
|
||||
"systems/l5r5e/templates/actors/npc/social.html",
|
||||
"systems/l5r5e/templates/actors/npc/rings.html",
|
||||
"systems/l5r5e/templates/actors/npc/attributes.html",
|
||||
"systems/l5r5e/templates/actors/npc/conflict.html",
|
||||
"systems/l5r5e/templates/actors/npc/skill.html",
|
||||
"systems/l5r5e/templates/actors/npc/techniques.html",
|
||||
// items
|
||||
"systems/l5r5e/templates/items/advancement/advancements.html",
|
||||
"systems/l5r5e/templates/items/advancement/advancement-entry.html",
|
||||
"systems/l5r5e/templates/items/advancement/advancement-sheet.html",
|
||||
"systems/l5r5e/templates/items/armor/armors.html",
|
||||
"systems/l5r5e/templates/items/armor/armor-entry.html",
|
||||
"systems/l5r5e/templates/items/armor/armor-sheet.html",
|
||||
"systems/l5r5e/templates/items/item/items.html",
|
||||
"systems/l5r5e/templates/items/item/item-entry.html",
|
||||
"systems/l5r5e/templates/items/item/item-value.html",
|
||||
"systems/l5r5e/templates/items/item/item-sheet.html",
|
||||
"systems/l5r5e/templates/items/item/item-infos.html",
|
||||
"systems/l5r5e/templates/items/peculiarity/peculiarities.html",
|
||||
"systems/l5r5e/templates/items/peculiarity/peculiarity-entry.html",
|
||||
"systems/l5r5e/templates/items/peculiarity/peculiarity-sheet.html",
|
||||
"systems/l5r5e/templates/items/property/properties.html",
|
||||
"systems/l5r5e/templates/items/property/property-entry.html",
|
||||
"systems/l5r5e/templates/items/property/property-sheet.html",
|
||||
"systems/l5r5e/templates/items/technique/technique-entry.html",
|
||||
"systems/l5r5e/templates/items/technique/technique-sheet.html",
|
||||
"systems/l5r5e/templates/items/weapon/weapons.html",
|
||||
"systems/l5r5e/templates/items/weapon/weapon-entry.html",
|
||||
"systems/l5r5e/templates/items/weapon/weapon-sheet.html",
|
||||
];
|
||||
|
||||
return loadTemplates(templatePaths);
|
||||
// *** Actors : PC ***
|
||||
`${tpl}actors/character/advancement-school.html`,
|
||||
`${tpl}actors/character/advancement-others.html`,
|
||||
`${tpl}actors/character/attributes.html`,
|
||||
`${tpl}actors/character/category.html`,
|
||||
`${tpl}actors/character/conflict.html`,
|
||||
`${tpl}actors/character/experience.html`,
|
||||
`${tpl}actors/character/identity.html`,
|
||||
`${tpl}actors/character/inventory.html`,
|
||||
`${tpl}actors/character/narrative.html`,
|
||||
`${tpl}actors/character/rings.html`,
|
||||
`${tpl}actors/character/skill.html`,
|
||||
`${tpl}actors/character/social.html`,
|
||||
`${tpl}actors/character/stance.html`,
|
||||
`${tpl}actors/character/techniques.html`,
|
||||
`${tpl}actors/character/twenty-questions-item.html`,
|
||||
// *** Actors : Npc ***
|
||||
`${tpl}actors/npc/attributes.html`,
|
||||
`${tpl}actors/npc/conflict.html`,
|
||||
`${tpl}actors/npc/identity.html`,
|
||||
`${tpl}actors/npc/inventory.html`,
|
||||
`${tpl}actors/npc/narrative.html`,
|
||||
`${tpl}actors/npc/rings.html`,
|
||||
`${tpl}actors/npc/social.html`,
|
||||
`${tpl}actors/npc/skill.html`,
|
||||
`${tpl}actors/npc/techniques.html`,
|
||||
// *** Items ***
|
||||
`${tpl}items/advancement/advancement-entry.html`,
|
||||
`${tpl}items/advancement/advancement-sheet.html`,
|
||||
`${tpl}items/armor/armors.html`,
|
||||
`${tpl}items/armor/armor-entry.html`,
|
||||
`${tpl}items/armor/armor-sheet.html`,
|
||||
`${tpl}items/bond/bond-entry.html`,
|
||||
`${tpl}items/bond/bond-sheet.html`,
|
||||
`${tpl}items/item/items.html`,
|
||||
`${tpl}items/item/item-entry.html`,
|
||||
`${tpl}items/item/item-value.html`,
|
||||
`${tpl}items/item/item-sheet.html`,
|
||||
`${tpl}items/item/item-infos.html`,
|
||||
`${tpl}items/item-pattern/item-pattern-entry.html`,
|
||||
`${tpl}items/item-pattern/item-pattern-sheet.html`,
|
||||
`${tpl}items/peculiarity/peculiarity-entry.html`,
|
||||
`${tpl}items/peculiarity/peculiarity-sheet.html`,
|
||||
`${tpl}items/property/properties.html`,
|
||||
`${tpl}items/property/property-entry.html`,
|
||||
`${tpl}items/property/property-sheet.html`,
|
||||
`${tpl}items/signature-scroll/signature-scroll-entry.html`,
|
||||
`${tpl}items/signature-scroll/signature-scroll-sheet.html`,
|
||||
`${tpl}items/technique/technique-entry.html`,
|
||||
`${tpl}items/technique/technique-sheet.html`,
|
||||
`${tpl}items/title/title-entry.html`,
|
||||
`${tpl}items/title/title-sheet.html`,
|
||||
`${tpl}items/weapon/weapons.html`,
|
||||
`${tpl}items/weapon/weapon-entry.html`,
|
||||
`${tpl}items/weapon/weapon-sheet.html`,
|
||||
]);
|
||||
};
|
||||
|
||||
@@ -2,6 +2,41 @@
|
||||
* Custom system settings register
|
||||
*/
|
||||
export const RegisterSettings = function () {
|
||||
/* ------------------------------------ */
|
||||
/* User settings */
|
||||
/* ------------------------------------ */
|
||||
game.settings.register("l5r5e", "rnk-deleteOldMessage", {
|
||||
name: "SETTINGS.RollNKeep.DeleteOldMessage",
|
||||
hint: "SETTINGS.RollNKeep.DeleteOldMessageHint",
|
||||
scope: "world",
|
||||
config: true,
|
||||
default: true,
|
||||
type: Boolean,
|
||||
});
|
||||
game.settings.register("l5r5e", "initiative-setTn1OnTypeChange", {
|
||||
name: "SETTINGS.Initiative.SetTn1OnTypeChange",
|
||||
hint: "SETTINGS.Initiative.SetTn1OnTypeChangeHint",
|
||||
scope: "world",
|
||||
config: true,
|
||||
type: Boolean,
|
||||
default: true,
|
||||
});
|
||||
game.settings.register("l5r5e", "token-reverseFatigueBar", {
|
||||
name: "SETTINGS.ReverseFatigueBar",
|
||||
scope: "world",
|
||||
config: true,
|
||||
type: Boolean,
|
||||
default: false,
|
||||
});
|
||||
game.settings.register("l5r5e", "techniques-customs", {
|
||||
name: "SETTINGS.CustomTechniques.Title",
|
||||
hint: "SETTINGS.CustomTechniques.Hint",
|
||||
scope: "world",
|
||||
config: true,
|
||||
type: Boolean,
|
||||
default: false,
|
||||
});
|
||||
|
||||
/* ------------------------------------ */
|
||||
/* Update */
|
||||
/* ------------------------------------ */
|
||||
@@ -16,42 +51,49 @@ export const RegisterSettings = function () {
|
||||
/* ------------------------------------ */
|
||||
/* Initiative Roll Dialog (GM only) */
|
||||
/* ------------------------------------ */
|
||||
game.settings.register("l5r5e", "initiative.difficulty.hidden", {
|
||||
game.settings.register("l5r5e", "initiative-difficulty-hidden", {
|
||||
name: "Initiative difficulty is hidden",
|
||||
scope: "world",
|
||||
config: false,
|
||||
type: Boolean,
|
||||
default: false,
|
||||
onChange: () => game.l5r5e.HelpersL5r5e.notifyDifficultyChange(),
|
||||
});
|
||||
game.settings.register("l5r5e", "initiative.difficulty.value", {
|
||||
game.settings.register("l5r5e", "initiative-difficulty-value", {
|
||||
name: "Initiative difficulty value",
|
||||
scope: "world",
|
||||
config: false,
|
||||
type: Number,
|
||||
default: 2,
|
||||
onChange: () => game.l5r5e.HelpersL5r5e.notifyDifficultyChange(),
|
||||
});
|
||||
game.settings.register("l5r5e", "initiative.encounter", {
|
||||
game.settings.register("l5r5e", "initiative-encounter", {
|
||||
name: "Initiative encounter type",
|
||||
scope: "world",
|
||||
config: false,
|
||||
type: String,
|
||||
default: "skirmish",
|
||||
onChange: () => {
|
||||
if (game.settings.get("l5r5e", "initiative-setTn1OnTypeChange")) {
|
||||
game.settings.set("l5r5e", "initiative-difficulty-value", 1);
|
||||
}
|
||||
},
|
||||
});
|
||||
game.settings.register("l5r5e", "initiative.prepared.character", {
|
||||
game.settings.register("l5r5e", "initiative-prepared-character", {
|
||||
name: "Initiative PC prepared or not",
|
||||
scope: "world",
|
||||
config: false,
|
||||
type: String,
|
||||
default: "null",
|
||||
});
|
||||
game.settings.register("l5r5e", "initiative.prepared.adversary", {
|
||||
game.settings.register("l5r5e", "initiative-prepared-adversary", {
|
||||
name: "Initiative NPC adversary are prepared or not",
|
||||
scope: "world",
|
||||
config: false,
|
||||
type: String,
|
||||
default: "null",
|
||||
});
|
||||
game.settings.register("l5r5e", "initiative.prepared.minion", {
|
||||
game.settings.register("l5r5e", "initiative-prepared-minion", {
|
||||
name: "Initiative NPC minion are prepared or not",
|
||||
scope: "world",
|
||||
config: false,
|
||||
|
||||
@@ -25,6 +25,10 @@ export class SocketHandlerL5r5e {
|
||||
this._onRefreshAppId(data);
|
||||
break;
|
||||
|
||||
case "updateMessageIdAndRefresh":
|
||||
this._onUpdateMessageIdAndRefresh(data);
|
||||
break;
|
||||
|
||||
default:
|
||||
console.warn(new Error("This socket event is not supported"), data);
|
||||
break;
|
||||
@@ -40,9 +44,13 @@ export class SocketHandlerL5r5e {
|
||||
});
|
||||
}
|
||||
_onDeleteChatMessage(data) {
|
||||
// Only delete the message if the user is a GM (otherwise it have no real effect)
|
||||
// Currently only used in RnK
|
||||
if (!game.user.isGM || !game.settings.get("l5r5e", "rnk-deleteOldMessage")) {
|
||||
return;
|
||||
}
|
||||
const message = game.messages.get(data.messageId);
|
||||
// only delete the message if the user is a GM and the event emitter is one of the recipients
|
||||
if (game.user.isGM && message.data["whisper"].includes(data.userId)) {
|
||||
if (message) {
|
||||
message.delete();
|
||||
}
|
||||
}
|
||||
@@ -65,4 +73,25 @@ export class SocketHandlerL5r5e {
|
||||
}
|
||||
app.refresh();
|
||||
}
|
||||
|
||||
/**
|
||||
* Change in app message and refresh (used in RnK)
|
||||
* @param appId
|
||||
* @param msgId
|
||||
*/
|
||||
updateMessageIdAndRefresh(appId, msgId) {
|
||||
game.socket.emit(SocketHandlerL5r5e.SOCKET_NAME, {
|
||||
type: "updateMessageIdAndRefresh",
|
||||
appId,
|
||||
msgId,
|
||||
});
|
||||
}
|
||||
_onUpdateMessageIdAndRefresh(data) {
|
||||
const app = Object.values(ui.windows).find((e) => e.id === data.appId);
|
||||
if (!app || !app.message || typeof app.refresh !== "function") {
|
||||
return;
|
||||
}
|
||||
app.message = game.messages.get(data.msgId);
|
||||
app.refresh();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
@import "../scss/ui";
|
||||
|
||||
.l5r5e {
|
||||
@import "../scss/dices";
|
||||
@import "../scss/dices-chat";
|
||||
@import "../scss/sheets";
|
||||
@import "../scss/npc";
|
||||
@import "../scss/nav";
|
||||
|
||||
File diff suppressed because one or more lines are too long
86
system/styles/scss/dices-chat.scss
Normal file
86
system/styles/scss/dices-chat.scss
Normal file
@@ -0,0 +1,86 @@
|
||||
// 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;
|
||||
}
|
||||
}
|
||||
|
||||
&.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;
|
||||
}
|
||||
&:last-child {
|
||||
flex-grow: 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,46 +1,74 @@
|
||||
// -- 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Dice in chat
|
||||
.chat-dice > img {
|
||||
border: 1px solid transparent;
|
||||
background-repeat: no-repeat;
|
||||
background-position: center;
|
||||
background-size: 100%;
|
||||
height: 44px;
|
||||
width: 44px;
|
||||
//cursor: pointer;
|
||||
//-webkit-appearance: none;
|
||||
//appearance: none;
|
||||
outline: none;
|
||||
margin: 0;
|
||||
flex: 0 0 20px;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.chat-profil {
|
||||
text-align: center;
|
||||
vertical-align: middle;
|
||||
|
||||
&-stance {
|
||||
font-size: 40px;
|
||||
position: relative;
|
||||
top: 8px;
|
||||
text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.5);
|
||||
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
|
||||
);
|
||||
}
|
||||
}
|
||||
&-element {
|
||||
flex-wrap: wrap;
|
||||
flex-grow: 1;
|
||||
|
||||
&-skill {
|
||||
flex-grow: 3;
|
||||
.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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -52,6 +80,8 @@
|
||||
|
||||
// Dice Picker
|
||||
.dice-picker-dialog {
|
||||
min-width: 600px;
|
||||
min-height: auto;
|
||||
// Utility
|
||||
* {
|
||||
transition: none;
|
||||
@@ -72,18 +102,26 @@
|
||||
text-align: center;
|
||||
background: none;
|
||||
border: none;
|
||||
height: calc(100% - 3rem);
|
||||
|
||||
td:first-child {
|
||||
width: 200px;
|
||||
}
|
||||
|
||||
td {
|
||||
width: 240px;
|
||||
}
|
||||
|
||||
td:last-child {
|
||||
width: 200px;
|
||||
border: 0 none;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
tbody {
|
||||
tr {
|
||||
td {
|
||||
width: 250px;
|
||||
padding: 0 0.5rem;
|
||||
&:first-child,
|
||||
&:last-child {
|
||||
width: 150px;
|
||||
}
|
||||
}
|
||||
&:last-child {
|
||||
td {
|
||||
width: 100%;
|
||||
padding: 0.5rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -151,17 +189,75 @@
|
||||
}
|
||||
|
||||
.roll-n-keep-dialog {
|
||||
min-width: 600px;
|
||||
max-width: 800px;
|
||||
&.finalized {
|
||||
width: auto;
|
||||
min-width: 400px;
|
||||
}
|
||||
img {
|
||||
border: 0;
|
||||
}
|
||||
table {
|
||||
display: table;
|
||||
min-height: 9rem;
|
||||
border: 0 none;
|
||||
margin: 0.25rem 0;
|
||||
padding: 0;
|
||||
tbody {
|
||||
tr {
|
||||
background: transparent;
|
||||
td {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.rnk-ct {
|
||||
margin: 0;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
border-radius: 0.25rem;
|
||||
background: rgba(0, 0, 0, 0.05);
|
||||
border: 1px solid rgba(255, 255, 255, 0.5);
|
||||
.rnk-center {
|
||||
flex: 350px;
|
||||
flex-wrap: wrap;
|
||||
display: flex;
|
||||
}
|
||||
}
|
||||
|
||||
.profil {
|
||||
border-bottom: 1px solid #782e22;
|
||||
border-bottom: 1px solid rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
|
||||
.dropbox {
|
||||
min-height: 100px;
|
||||
position: relative;
|
||||
min-height: 7rem;
|
||||
|
||||
legend {
|
||||
i:last-child {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
border-radius: 0.15rem;
|
||||
padding: 0 0.1rem 0 0.15rem;
|
||||
font-size: 0.65rem;
|
||||
line-height: 1rem;
|
||||
width: 1rem;
|
||||
margin: 0.25rem;
|
||||
text-align: center;
|
||||
color: white;
|
||||
background: $l5r5e-label;
|
||||
}
|
||||
}
|
||||
|
||||
&.faces-change {
|
||||
min-height: 40px;
|
||||
margin: 0.5rem auto;
|
||||
}
|
||||
&.discards {
|
||||
border: 1px solid gray;
|
||||
}
|
||||
@@ -169,31 +265,143 @@
|
||||
border: 1px solid orangered;
|
||||
}
|
||||
&.keeps {
|
||||
flex: 100%;
|
||||
border: 1px solid green;
|
||||
}
|
||||
&.swap {
|
||||
flex: 0 0 calc(100px + 1rem);
|
||||
flex-direction: column;
|
||||
border: 1px solid fuchsia;
|
||||
}
|
||||
&.discards,
|
||||
&.rerolls {
|
||||
flex: 0 0 calc(50% - 0.5rem);
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
}
|
||||
/* Dice Marker */
|
||||
.dice-ct {
|
||||
position: relative;
|
||||
padding: 0.25rem;
|
||||
&:before {
|
||||
content: "";
|
||||
position: absolute;
|
||||
height: 0.5rem;
|
||||
width: 2px;
|
||||
top: -0.3rem;
|
||||
right: calc(50% - 1px);
|
||||
background: $l5r5e-black-light;
|
||||
}
|
||||
&:after {
|
||||
content: "\f128";
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
right: 0;
|
||||
border-radius: 0.15rem;
|
||||
padding: 0 0.15rem;
|
||||
font-size: 0.65rem;
|
||||
line-height: 1rem;
|
||||
width: 0.65rem;
|
||||
text-align: center;
|
||||
color: white;
|
||||
background: gray;
|
||||
}
|
||||
&.discard {
|
||||
filter: opacity(0.5);
|
||||
&:after {
|
||||
content: "\f00d";
|
||||
background: gray;
|
||||
}
|
||||
}
|
||||
&.reroll {
|
||||
filter: opacity(0.5);
|
||||
&:after {
|
||||
content: "\f2f9";
|
||||
background: orangered;
|
||||
}
|
||||
}
|
||||
&.keep {
|
||||
&:after {
|
||||
content: "\f00c";
|
||||
background: green;
|
||||
}
|
||||
}
|
||||
&.swap {
|
||||
&:after {
|
||||
content: "\f337";
|
||||
background: fuchsia;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
tr:first-child .dice-ct {
|
||||
&:before {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
.dice {
|
||||
height: 40px;
|
||||
width: 40px;
|
||||
&.discard {
|
||||
filter: opacity(0.5);
|
||||
border: 0 none;
|
||||
}
|
||||
&.reroll {
|
||||
filter: opacity(0.5);
|
||||
border: 0 none;
|
||||
}
|
||||
&.keep {
|
||||
border: 0 none;
|
||||
}
|
||||
&.swap {
|
||||
border: 0 none;
|
||||
}
|
||||
}
|
||||
|
||||
.discard {
|
||||
filter: opacity(0.5);
|
||||
border: 3px solid gray;
|
||||
#finalize {
|
||||
width: 100%;
|
||||
margin: 0.5rem 0.25rem 0.25rem;
|
||||
}
|
||||
.reroll {
|
||||
filter: opacity(0.5);
|
||||
border: 3px solid orangered;
|
||||
.section-header {
|
||||
i {
|
||||
font-size: 0.75rem;
|
||||
margin: 0 0.25rem;
|
||||
}
|
||||
}
|
||||
.keep {
|
||||
border: 3px solid green;
|
||||
.fa-sign-in-alt {
|
||||
transform: rotate(90deg);
|
||||
}
|
||||
|
||||
.chat-profil {
|
||||
ul {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
li {
|
||||
&:nth-child(1),
|
||||
&:nth-child(2) {
|
||||
flex: 0 0 4rem;
|
||||
padding: 0 0.25rem 0.25rem;
|
||||
}
|
||||
&:nth-child(4) {
|
||||
flex: 0 0 4rem;
|
||||
padding: 0 0.25rem 0.25rem;
|
||||
}
|
||||
}
|
||||
.profile-img {
|
||||
width: 4rem;
|
||||
}
|
||||
.chat-profil-stance {
|
||||
font-size: 3.5rem;
|
||||
line-height: 3.5rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#l5r5e-gm-tools-dialog {
|
||||
bottom: 0;
|
||||
right: 0.5rem;
|
||||
//bottom: 0;
|
||||
//right: 0.5rem;
|
||||
display: flex;
|
||||
background-position: center;
|
||||
background-size: 100%;
|
||||
@@ -208,13 +416,15 @@
|
||||
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 {
|
||||
font-family: $font-primary;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.15rem;
|
||||
letter-spacing: 0.25rem;
|
||||
line-height: 2.25rem;
|
||||
color: $white-light;
|
||||
}
|
||||
}
|
||||
.window-content {
|
||||
@@ -222,22 +432,50 @@
|
||||
vertical-align: middle;
|
||||
background: transparent;
|
||||
color: $white-light;
|
||||
form {
|
||||
padding: 0;
|
||||
}
|
||||
.gm-tools-container {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
flex-flow: wrap;
|
||||
a {
|
||||
font-size: 2rem;
|
||||
line-height: 2rem;
|
||||
min-height: 2rem;
|
||||
margin: 0;
|
||||
li {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
border-right: 1px solid #c3a582;
|
||||
cursor: url("../assets/cursors/pointer.webp"), pointer;
|
||||
i {
|
||||
font-size: 3rem;
|
||||
line-height: 4rem;
|
||||
vertical-align: middle;
|
||||
&:last-child {
|
||||
margin: 0;
|
||||
border: 0 none;
|
||||
}
|
||||
:hover {
|
||||
text-shadow: 0 0 $red;
|
||||
}
|
||||
}
|
||||
.difficulty {
|
||||
flex: 1;
|
||||
font-size: 3rem;
|
||||
.difficulty_hidden {
|
||||
.fa {
|
||||
width: 3rem;
|
||||
}
|
||||
.difficulty {
|
||||
flex: 1rem;
|
||||
width: 2rem;
|
||||
font-size: 2rem;
|
||||
text-align: center;
|
||||
margin: 0;
|
||||
padding: 0.5rem;
|
||||
}
|
||||
}
|
||||
.fa {
|
||||
padding: 0.5rem;
|
||||
}
|
||||
.fa-bed,
|
||||
.fa-star-half-alt {
|
||||
width: 100%;
|
||||
padding: 0.5rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -246,3 +484,48 @@
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
.dice-picker-dialog,
|
||||
.roll-n-keep-dialog {
|
||||
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;
|
||||
margin: 0.5rem 0 0;
|
||||
&:hover {
|
||||
background: linear-gradient(
|
||||
$l5r5e-linear-gradient-first-dark,
|
||||
$l5r5e-linear-gradient-first,
|
||||
$l5r5e-linear-gradient-first-dark
|
||||
);
|
||||
}
|
||||
&[disabled] {
|
||||
opacity: 0.25;
|
||||
&:hover {
|
||||
box-shadow: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
#context-menu {
|
||||
max-width: none;
|
||||
}
|
||||
.symbols-help {
|
||||
font-style: italic;
|
||||
color: #666;
|
||||
font-size: 0.8rem;
|
||||
line-height: 1rem;
|
||||
margin: 0.5rem auto 0;
|
||||
i {
|
||||
font-size: 1rem;
|
||||
line-height: 1rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,10 +18,10 @@
|
||||
src: url("../fonts/PatrickHand.ttf") format("truetype");
|
||||
}
|
||||
|
||||
// Font ManoNegra
|
||||
// Font Caballar
|
||||
@font-face {
|
||||
font-family: "ManoNegra";
|
||||
src: url("../fonts/ManoNegra.ttf") format("truetype");
|
||||
font-family: "Caballar";
|
||||
src: url("../fonts/Caballar.ttf") format("truetype");
|
||||
}
|
||||
|
||||
// Font ArchitectsDaughter
|
||||
@@ -32,7 +32,7 @@
|
||||
|
||||
$font-primary: "PatrickHand", sans-serif;
|
||||
$font-secondary: "BrushtipTexe", sans-serif;
|
||||
$font-tertiary: "BrushtipTexe", sans-serif;
|
||||
$font-tertiary: "Caballar", sans-serif;
|
||||
$font-quaternary: "ArchitectsDaughter", sans-serif;
|
||||
$font-logoType: "LogotypeL5r", sans-serif;
|
||||
|
||||
|
||||
@@ -186,6 +186,7 @@ li {
|
||||
// Fieldset
|
||||
fieldset {
|
||||
flex: 1;
|
||||
flex-wrap: wrap;
|
||||
display: flex;
|
||||
margin: 0 0.25rem;
|
||||
padding: 0.5rem;
|
||||
@@ -245,7 +246,6 @@ input[type="number"] {
|
||||
}
|
||||
|
||||
table {
|
||||
text-align: center;
|
||||
background: transparent;
|
||||
border: 1px solid $l5r5e-title;
|
||||
thead {
|
||||
@@ -324,6 +324,16 @@ sup {
|
||||
}
|
||||
}
|
||||
|
||||
// Entity link style for compendium folder custom link
|
||||
a.compendium-link {
|
||||
background: #ddd;
|
||||
padding: 1px 4px;
|
||||
border: 1px solid #4b4a44;
|
||||
border-radius: 2px;
|
||||
white-space: nowrap;
|
||||
word-break: break-all;
|
||||
}
|
||||
|
||||
// Fix for "search anywhere" draggable icon
|
||||
.window-draggable-handle {
|
||||
z-index: 2;
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
// Item List
|
||||
.item-list {
|
||||
flex: 100%;
|
||||
.tab[data-tab] {
|
||||
display: none;
|
||||
}
|
||||
.item {
|
||||
.item-header {
|
||||
display: flex;
|
||||
@@ -96,10 +99,14 @@
|
||||
// Advancement Sheet, Armor Sheet, Item Sheet, Peculiarity Sheet, Property Sheet, Technique Sheet, Weapon Sheet
|
||||
&.advancement,
|
||||
&.armor,
|
||||
&.bond,
|
||||
&.item,
|
||||
&.item-pattern,
|
||||
&.peculiarity,
|
||||
&.property,
|
||||
&.signature-scroll,
|
||||
&.technique,
|
||||
&.title,
|
||||
&.weapon {
|
||||
.sheet-header {
|
||||
margin-bottom: 0.5rem;
|
||||
@@ -205,6 +212,13 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
.bonds-types {
|
||||
flex: 100%;
|
||||
input {
|
||||
width: 75%;
|
||||
float: right;
|
||||
}
|
||||
}
|
||||
}
|
||||
&.infos {
|
||||
display: flex;
|
||||
@@ -355,6 +369,26 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
&.item-pattern {
|
||||
.attribute {
|
||||
&.item {
|
||||
display: inline;
|
||||
.item-properties {
|
||||
display: inline;
|
||||
li {
|
||||
display: inline;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
&.title {
|
||||
article {
|
||||
&.attributes {
|
||||
height: auto;
|
||||
}
|
||||
}
|
||||
}
|
||||
.item-list {
|
||||
> li {
|
||||
.item-description {
|
||||
|
||||
@@ -4,7 +4,8 @@ nav {
|
||||
height: 3rem;
|
||||
line-height: 3rem;
|
||||
font-family: $font-tertiary;
|
||||
font-size: 1.25rem;
|
||||
letter-spacing: -0.05rem;
|
||||
font-size: 1rem;
|
||||
border: 0 none;
|
||||
border-bottom: 1px solid $l5r5e-title;
|
||||
margin-bottom: 0;
|
||||
|
||||
@@ -96,7 +96,7 @@
|
||||
width: 100%;
|
||||
line-height: 2rem;
|
||||
font-size: 0.75rem;
|
||||
margin: 0.25rem 0.25rem 0.5rem;
|
||||
margin: 0 0 0.5rem;
|
||||
text-align: center;
|
||||
li {
|
||||
flex: 1;
|
||||
@@ -133,24 +133,32 @@
|
||||
}
|
||||
}
|
||||
article {
|
||||
.weapons-content {
|
||||
flex: 1;
|
||||
}
|
||||
min-height: auto;
|
||||
display: flex;
|
||||
fieldset {
|
||||
fieldset,
|
||||
.checklist {
|
||||
flex: 0 0 calc(100% - 0.5rem);
|
||||
}
|
||||
.items-content {
|
||||
flex: 0 0 calc(100% - 0.5rem);
|
||||
margin: 1rem 0.25rem 0;
|
||||
}
|
||||
.weapons-content {
|
||||
flex: 1;
|
||||
}
|
||||
.initiative-wrapper {
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
&:last-child {
|
||||
padding-bottom: 1rem;
|
||||
}
|
||||
.techniques-wrapper {
|
||||
padding-left: 0.5rem;
|
||||
fieldset,
|
||||
.checklist {
|
||||
flex: 100%;
|
||||
margin: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
.npc-note {
|
||||
.editor {
|
||||
@@ -158,4 +166,7 @@
|
||||
max-height: 12rem;
|
||||
}
|
||||
}
|
||||
.narrative-note {
|
||||
flex: 0 0 calc(50% - 0.25rem);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,16 +17,11 @@
|
||||
.sheet-body {
|
||||
height: calc(100% - 27rem);
|
||||
}
|
||||
.techniques-wrapper {
|
||||
fieldset {
|
||||
&:last-child {
|
||||
margin: 0 0 0 0.5rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
fieldset {
|
||||
&.advancement {
|
||||
display: block;
|
||||
&.advancement,
|
||||
&.items-wrapper {
|
||||
display: grid;
|
||||
flex: calc(100%);
|
||||
}
|
||||
}
|
||||
.advancements-tabs {
|
||||
@@ -44,6 +39,15 @@
|
||||
flex: 0 0 100%;
|
||||
align-items: flex-start;
|
||||
}
|
||||
section,
|
||||
article {
|
||||
&.tab[data-tab] {
|
||||
display: none;
|
||||
&.active {
|
||||
display: flex;
|
||||
}
|
||||
}
|
||||
}
|
||||
.sheet-header {
|
||||
flex: 0 0 100%;
|
||||
align-items: flex-start;
|
||||
@@ -274,6 +278,27 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
.affinities {
|
||||
padding-top: 0.25rem;
|
||||
.ring {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
flex-direction: unset;
|
||||
flex: 3rem;
|
||||
height: 1.5rem;
|
||||
margin: 0;
|
||||
}
|
||||
i {
|
||||
flex: 1rem;
|
||||
margin: 0;
|
||||
text-align: center;
|
||||
}
|
||||
input {
|
||||
flex: 1.25rem;
|
||||
height: 1.25rem;
|
||||
margin: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
.focus-content,
|
||||
.vigilance-content {
|
||||
@@ -501,27 +526,68 @@
|
||||
padding: 0.5rem;
|
||||
flex-wrap: wrap;
|
||||
min-height: calc(100% - 3.25rem);
|
||||
&.tab[data-tab] {
|
||||
&.active {
|
||||
display: flex;
|
||||
fieldset {
|
||||
h3 {
|
||||
font-size: 1.25rem;
|
||||
width: 100%;
|
||||
text-align: left;
|
||||
line-height: 2rem;
|
||||
color: $l5r5e-bold;
|
||||
border-bottom: 1px solid;
|
||||
.item-control {
|
||||
&.item-add {
|
||||
float: right;
|
||||
font-size: 0.75rem;
|
||||
line-height: 0.75rem;
|
||||
border: 1px solid;
|
||||
padding: 0.25rem;
|
||||
margin: 0.25rem;
|
||||
color: $white;
|
||||
background: $l5r5e-bold;
|
||||
&:hover {
|
||||
opacity: 0.75;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.narrative-content,
|
||||
.narrative-note {
|
||||
flex: 0 0 calc(50% - 0.5rem);
|
||||
.narrative-content {
|
||||
flex: 100%;
|
||||
display: flex;
|
||||
fieldset {
|
||||
display: block;
|
||||
flex: 0 0 calc(50% - 0.75rem);
|
||||
label {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
.narrative-description {
|
||||
max-height: 13rem;
|
||||
font-size: 0.85rem;
|
||||
flex: 1;
|
||||
}
|
||||
}
|
||||
.narrative-list {
|
||||
flex: 0 0 calc(50% - 0.25rem);
|
||||
fieldset {
|
||||
flex: 0 0 calc(50% - 0.25rem);
|
||||
label {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
.narrative-note {
|
||||
font-size: 0.85rem;
|
||||
}
|
||||
}
|
||||
.techniques-wrapper {
|
||||
padding-left: 0.25rem;
|
||||
fieldset {
|
||||
margin: 0 0 0 0.25rem;
|
||||
}
|
||||
.checklist {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
font-size: 0.85rem;
|
||||
margin: 0 0 0.25rem 0.5rem;
|
||||
margin: 0 0 0.25rem 0.25rem;
|
||||
padding: 0.5rem;
|
||||
background: $l5r5e-title;
|
||||
--notchSize: 0.25rem;
|
||||
@@ -611,27 +677,38 @@
|
||||
}
|
||||
.xp,
|
||||
.money-wrapper {
|
||||
flex: 0 0 6rem;
|
||||
flex-direction: column;
|
||||
flex: 100%;
|
||||
flex-direction: row;
|
||||
color: $black-light;
|
||||
label {
|
||||
padding: 0.25rem;
|
||||
display: flex;
|
||||
flex: calc(100% / 3);
|
||||
padding: 0.5rem;
|
||||
font-size: 0.85rem;
|
||||
input {
|
||||
margin-left: 0.5rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
table {
|
||||
font-size: 0.85rem;
|
||||
color: $black-light;
|
||||
text-align: left;
|
||||
thead {
|
||||
font-family: $font-secondary;
|
||||
font-weight: normal;
|
||||
th {
|
||||
padding-left: 0.5rem;
|
||||
padding-right: 0.5rem;
|
||||
font-size: 1rem;
|
||||
&:first-child {
|
||||
flex: 0 0 2rem;
|
||||
}
|
||||
&:nth-child(2) {
|
||||
flex: calc(100% - 16rem);
|
||||
padding-left: 0.5rem;
|
||||
text-align: left;
|
||||
}
|
||||
&:nth-child(2) {
|
||||
flex: 0 0 2rem;
|
||||
}
|
||||
&:nth-child(3),
|
||||
&:nth-child(4) {
|
||||
flex: 0 0 4rem;
|
||||
@@ -665,6 +742,13 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
.tfoot {
|
||||
padding: 0.25 0.5rem;
|
||||
background: rgba(186, 187, 177, 0.5);
|
||||
text-shadow: none;
|
||||
border-top: rgba(186, 187, 177, 0.5);
|
||||
text-align: center;
|
||||
}
|
||||
img {
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
@@ -672,6 +756,26 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
.inventory {
|
||||
.items-wrapper {
|
||||
h3 {
|
||||
background: rgba(90, 110, 90, 0.15);
|
||||
color: $l5r5e-label;
|
||||
border-bottom: 1px solid $white;
|
||||
font-family: $font-tertiary;
|
||||
font-size: 1rem;
|
||||
padding-left: 0.5rem;
|
||||
margin: 0;
|
||||
}
|
||||
.item-list {
|
||||
display: block;
|
||||
&.toggle-active {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&.actor,
|
||||
&.npc {
|
||||
.initiative {
|
||||
@@ -714,6 +818,7 @@
|
||||
.sheet-header {
|
||||
flex: none;
|
||||
height: auto;
|
||||
width: 100%;
|
||||
}
|
||||
ul {
|
||||
display: flex;
|
||||
@@ -748,6 +853,17 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
nav {
|
||||
&.sheet-tabs {
|
||||
flex: 100%;
|
||||
}
|
||||
}
|
||||
&.title {
|
||||
.experience {
|
||||
flex: 100%;
|
||||
width: calc(100% - 7.5rem);
|
||||
}
|
||||
}
|
||||
}
|
||||
// Lang Adjust.
|
||||
&.sheet {
|
||||
|
||||
@@ -84,6 +84,7 @@
|
||||
}
|
||||
table {
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
tr {
|
||||
th {
|
||||
color: $l5r5e-label;
|
||||
|
||||
@@ -199,6 +199,9 @@ button {
|
||||
}
|
||||
|
||||
// Chat
|
||||
#chat-form textarea {
|
||||
color: $black;
|
||||
}
|
||||
#chat-form textarea,
|
||||
.chat-message,
|
||||
.blind,
|
||||
@@ -206,6 +209,9 @@ button {
|
||||
#chat-controls .roll-type-select,
|
||||
.header-search input {
|
||||
background: transparent url("../assets/ui/chat-texture.webp") no-repeat;
|
||||
&:focus {
|
||||
background: #f0f0e0 url("../assets/ui/chat-texture.webp") no-repeat;
|
||||
}
|
||||
}
|
||||
.header-search input[name="search"] {
|
||||
background-color: $l5r5e-chat-color;
|
||||
|
||||
@@ -2,9 +2,12 @@
|
||||
"name": "l5r5e",
|
||||
"title": "Legend of the Five Rings (5th Edition)",
|
||||
"description": "This is an authorised multilingual game system En|Fr|Es, for Legend of the Five Rings (5th Edition) by <a href='https://edge-studio.net/'>Edge Studio</a> <p> - Join the official Discord server: <a href='https://discord.gg/foundryvtt'> Official Discord</a></p><p> - Rejoignez la communauté Francophone: <a href='https://discord.gg/pPSDNJk'>Francophone Discord</a></p>",
|
||||
"version": "1.1.2",
|
||||
"minimumCoreVersion": "0.7.9",
|
||||
"compatibleCoreVersion": "0.7.9",
|
||||
"url": "https://gitlab.com/teaml5r/l5r5e",
|
||||
"manifest": "https://gitlab.com/teaml5r/l5r5e/-/raw/master/system/system.json",
|
||||
"download": "https://gitlab.com/teaml5r/l5r5e/-/jobs/artifacts/v1.3.0/raw/l5r5e.zip?job=build",
|
||||
"version": "1.3.0",
|
||||
"minimumCoreVersion": "0.8.5",
|
||||
"compatibleCoreVersion": "0.8.6",
|
||||
"manifestPlusVersion": "1.0.0",
|
||||
"socket": true,
|
||||
"author": "Team L5R",
|
||||
@@ -19,12 +22,6 @@
|
||||
},
|
||||
{
|
||||
"name": "Carter"
|
||||
},
|
||||
{
|
||||
"name": "Hrunh"
|
||||
},
|
||||
{
|
||||
"name": "Sasmira"
|
||||
}
|
||||
],
|
||||
"background": "L5R-Header.webp",
|
||||
@@ -158,6 +155,34 @@
|
||||
"entity": "Item",
|
||||
"system": "l5r5e"
|
||||
},
|
||||
{
|
||||
"name": "core-bonds",
|
||||
"label": "Bonds",
|
||||
"path": "packs/core-bonds.db",
|
||||
"entity": "Item",
|
||||
"system": "l5r5e"
|
||||
},
|
||||
{
|
||||
"name": "core-titles",
|
||||
"label": "Titles",
|
||||
"path": "packs/core-titles.db",
|
||||
"entity": "Item",
|
||||
"system": "l5r5e"
|
||||
},
|
||||
{
|
||||
"name": "core-item-patterns",
|
||||
"label": "Item Patterns",
|
||||
"path": "packs/core-item-patterns.db",
|
||||
"entity": "Item",
|
||||
"system": "l5r5e"
|
||||
},
|
||||
{
|
||||
"name": "core-signature-scrolls",
|
||||
"label": "Signature Scrolls",
|
||||
"path": "packs/core-signature-scrolls.db",
|
||||
"entity": "Item",
|
||||
"system": "l5r5e"
|
||||
},
|
||||
{
|
||||
"name": "great-clans-presentation",
|
||||
"label": "Great Clans Presentation",
|
||||
@@ -182,8 +207,5 @@
|
||||
"name": "Spanish (Spain)",
|
||||
"path": "lang/es-es.json"
|
||||
}
|
||||
],
|
||||
"url": "https://gitlab.com/teaml5r/l5r5e",
|
||||
"manifest": "https://gitlab.com/teaml5r/l5r5e/-/raw/master/system/system.json",
|
||||
"download": "https://gitlab.com/teaml5r/l5r5e/-/jobs/artifacts/v1.1.2/raw/l5r5e.zip?job=build"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -21,13 +21,14 @@
|
||||
}
|
||||
},
|
||||
"social": {
|
||||
"notes": "",
|
||||
"description": "",
|
||||
"social": {
|
||||
"honor": 0,
|
||||
"glory": 0,
|
||||
"status": 0,
|
||||
"ninjo": "",
|
||||
"giri": "",
|
||||
"titles": ""
|
||||
"giri": ""
|
||||
}
|
||||
},
|
||||
"skills": {
|
||||
@@ -103,34 +104,29 @@
|
||||
"shuji": false,
|
||||
"maho": false,
|
||||
"ninjutsu": false,
|
||||
"list": []
|
||||
"specificity": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"character": {
|
||||
"templates": ["identity", "rings", "social", "skills", "techniques", "conflict", "advancement"],
|
||||
"zeni": 0,
|
||||
"notes": "",
|
||||
"twenty_questions": {}
|
||||
},
|
||||
"npc": {
|
||||
"templates": ["rings", "social", "techniques", "conflict"],
|
||||
"type": "minion",
|
||||
"attitude": "",
|
||||
"notes": "",
|
||||
"conflict_rank": {
|
||||
"martial": 0,
|
||||
"social": 0
|
||||
},
|
||||
"rings_affinities": {
|
||||
"strength": {
|
||||
"ring": "fire",
|
||||
"value": 2
|
||||
},
|
||||
"weakness": {
|
||||
"ring": "water",
|
||||
"value": -2
|
||||
}
|
||||
"earth": 0,
|
||||
"air": 0,
|
||||
"water": 0,
|
||||
"fire": 0,
|
||||
"void": 0
|
||||
},
|
||||
"skills": {
|
||||
"artisan": 0,
|
||||
@@ -142,15 +138,30 @@
|
||||
}
|
||||
},
|
||||
"Item": {
|
||||
"types": ["item", "armor", "weapon", "technique", "property", "peculiarity", "advancement"],
|
||||
"types": [
|
||||
"item",
|
||||
"armor",
|
||||
"weapon",
|
||||
"technique",
|
||||
"property",
|
||||
"peculiarity",
|
||||
"advancement",
|
||||
"title",
|
||||
"bond",
|
||||
"signature_scroll",
|
||||
"item_pattern"
|
||||
],
|
||||
"templates": {
|
||||
"basics": {
|
||||
"book_reference": "",
|
||||
"description": ""
|
||||
"description": "",
|
||||
"parent_id": null,
|
||||
"items": []
|
||||
},
|
||||
"advancement": {
|
||||
"in_curriculum": false,
|
||||
"xp_used": 3,
|
||||
"xp_cost": 3,
|
||||
"rank": 1,
|
||||
"bought_at_rank": 1,
|
||||
"ring": "void"
|
||||
@@ -187,8 +198,7 @@
|
||||
},
|
||||
"technique": {
|
||||
"templates": ["basics", "advancement"],
|
||||
"technique_type": "kata",
|
||||
"xp_cost": 3
|
||||
"technique_type": "kata"
|
||||
},
|
||||
"property": {
|
||||
"templates": ["basics"]
|
||||
@@ -202,6 +212,23 @@
|
||||
"templates": ["basics", "advancement"],
|
||||
"advancement_type": "skill",
|
||||
"skill": ""
|
||||
},
|
||||
"title": {
|
||||
"templates": ["basics", "advancement"],
|
||||
"advancements": [],
|
||||
"xp_used_total": 0
|
||||
},
|
||||
"bond": {
|
||||
"templates": ["basics", "advancement"],
|
||||
"bond_type": ""
|
||||
},
|
||||
"item_pattern": {
|
||||
"templates": ["basics", "advancement"],
|
||||
"linked_property_id": null,
|
||||
"rarity_modifier": ""
|
||||
},
|
||||
"signature_scroll": {
|
||||
"templates": ["basics", "advancement"]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,73 +1,58 @@
|
||||
<form class="{{cssClass}}" data-lang="{{localize 'I18N.Language'}}" autocomplete="off">
|
||||
{{!-- Sheet Header --}}
|
||||
<header class="sheet-header">
|
||||
<img class="profile-img" src="{{actor.img}}" data-edit="img" title="{{actor.name}}"/>
|
||||
<img class="profile-img" src="{{data.img}}" data-edit="img" title="{{data.name}}"/>
|
||||
<div class="header-fields identity-wrapper">
|
||||
<h1 class="charname"><input name="name" type="text" value="{{actor.name}}" placeholder="Name"/></h1>
|
||||
{{> 'systems/l5r5e/templates/actors/character/identity.html' }}
|
||||
<h1 class="charname"><input name="name" type="text" value="{{data.name}}" placeholder="Name"/></h1>
|
||||
{{> 'systems/l5r5e/templates/actors/character/identity.html'}}
|
||||
</div>
|
||||
<div class="header-fields">
|
||||
<h2>{{ localize 'l5r5e.social.title' }}</h2>
|
||||
<h2 class="right">{{ localize 'l5r5e.attributes.title' }}</h2>
|
||||
{{> 'systems/l5r5e/templates/actors/character/social.html' }}
|
||||
{{> 'systems/l5r5e/templates/actors/character/rings.html' }}
|
||||
{{> 'systems/l5r5e/templates/actors/character/attributes.html' }}
|
||||
<h2>{{localize 'l5r5e.social.title'}}</h2>
|
||||
<h2 class="right">{{localize 'l5r5e.attributes.title'}}</h2>
|
||||
{{> 'systems/l5r5e/templates/actors/character/social.html'}}
|
||||
{{> 'systems/l5r5e/templates/actors/character/rings.html'}}
|
||||
{{> 'systems/l5r5e/templates/actors/character/attributes.html'}}
|
||||
</div>
|
||||
</header>
|
||||
{{!-- Sheet Body --}}
|
||||
<section class="sheet-body">
|
||||
{{!-- Sheet Tab Navigation --}}
|
||||
<nav class="sheet-tabs tabs" data-group="primary">
|
||||
<a class="item" data-tab="skills">{{ localize 'l5r5e.skills.title' }}</a>
|
||||
<a class="item" data-tab="narrative">{{ localize 'l5r5e.narrative' }}</a>
|
||||
<a class="item" data-tab="conflict">{{ localize 'l5r5e.conflict.title' }}</a>
|
||||
<a class="item" data-tab="inventory">{{ localize 'l5r5e.inventory' }}</a>
|
||||
<a class="item" data-tab="experience">{{ localize 'l5r5e.experience' }}</a>
|
||||
<a class="item" data-tab="skills">{{localize 'l5r5e.skills.title'}}</a>
|
||||
<a class="item" data-tab="narrative">{{localize 'l5r5e.narrative'}}</a>
|
||||
<a class="item" data-tab="conflict">{{localize 'l5r5e.conflict.title'}}</a>
|
||||
<a class="item" data-tab="inventory">{{localize 'l5r5e.inventory'}}</a>
|
||||
<a class="item" data-tab="experience">{{localize 'l5r5e.experience'}}</a>
|
||||
</nav>
|
||||
|
||||
{{!-- Skills Tab --}}
|
||||
<article class="tab skills" data-group="primary" data-tab="skills">
|
||||
<ul class="skills-wrapper">
|
||||
{{#each data.skills as |category id|}}
|
||||
{{#each data.data.skills as |category id|}}
|
||||
{{> 'systems/l5r5e/templates/actors/character/category.html' category=category categoryId=id}}
|
||||
{{/each}}
|
||||
</ul>
|
||||
{{> 'systems/l5r5e/templates/actors/character/techniques.html' }}
|
||||
{{> 'systems/l5r5e/templates/actors/character/techniques.html'}}
|
||||
</article>
|
||||
|
||||
{{!-- Narrative Tab --}}
|
||||
<article class="tab narrative" data-group="primary" data-tab="narrative">
|
||||
{{> 'systems/l5r5e/templates/actors/character/narrative.html' }}
|
||||
{{> 'systems/l5r5e/templates/actors/character/narrative.html'}}
|
||||
</article>
|
||||
|
||||
{{!-- Conflict Tab --}}
|
||||
<article class="tab conflict" data-group="primary" data-tab="conflict">
|
||||
{{> 'systems/l5r5e/templates/actors/character/conflict.html' }}
|
||||
{{> 'systems/l5r5e/templates/actors/character/conflict.html'}}
|
||||
</article>
|
||||
|
||||
{{!-- Inventory Tab --}}
|
||||
<article class="tab inventory" data-group="primary" data-tab="inventory">
|
||||
<fieldset class="money money-wrapper">
|
||||
<legend class="section-header">{{localize 'l5r5e.money.title'}}</legend>
|
||||
<label>
|
||||
{{localize 'l5r5e.money.koku'}}
|
||||
<input name="data.money.koku" type="number" value="{{actor.data.money.koku}}" data-dtype="Number" min="0" placeholder="0"/>
|
||||
</label>
|
||||
<label>
|
||||
{{localize 'l5r5e.money.bu'}}
|
||||
<input name="data.money.bu" type="number" value="{{actor.data.money.bu}}" data-dtype="Number" min="0" placeholder="0"/>
|
||||
</label>
|
||||
<label>
|
||||
{{localize 'l5r5e.money.zeni'}}
|
||||
<input name="data.money.zeni" type="number" value="{{actor.data.money.zeni}}" data-dtype="Number" min="0" placeholder="0"/>
|
||||
</label>
|
||||
</fieldset>
|
||||
{{> 'systems/l5r5e/templates/items/item/items.html' }}
|
||||
{{> 'systems/l5r5e/templates/actors/character/inventory.html'}}
|
||||
</article>
|
||||
|
||||
{{!-- Experience Tab --}}
|
||||
<article class="tab experience" data-group="primary" data-tab="experience">
|
||||
{{> 'systems/l5r5e/templates/actors/character/experience.html' }}
|
||||
{{> 'systems/l5r5e/templates/actors/character/experience.html'}}
|
||||
</article>
|
||||
</section>
|
||||
</form>
|
||||
15
system/templates/actors/character/advancement-others.html
Normal file
15
system/templates/actors/character/advancement-others.html
Normal file
@@ -0,0 +1,15 @@
|
||||
<tr class="flexrow row advancement">
|
||||
<td class="name" name="advancement.name"><img src="{{advancement.img}}" title="{{advancement.name}}"> {{advancement.name}}{{#if advancement.data.bond_type}} ({{advancement.data.bond_type}}){{/if}}</td>
|
||||
{{#if show_curriculum_toggle}}<td class="curriculum" name="curriculum">{{#if advancement.data.in_curriculum}}<i class="fas fa-graduation-cap"></i> {{/if}}</td>{{/if}}
|
||||
<td class="xp" name="advancement.xp">{{#if advancement.data.xp_used_total}}{{advancement.data.xp_used_total}}{{else}}{{advancement.data.xp_used}}{{/if}}</td>
|
||||
<td class="rank" name="advancement.rank">{{advancement.data.rank}}</td>
|
||||
{{#if editable}}
|
||||
<td class="actions">
|
||||
<ul>
|
||||
{{#if show_curriculum_toggle}}<li data-item-id="{{advancement._id}}" class="item-control item-curriculum" title="{{localize 'l5r5e.advancements.curriculum'}}"><i class="fas fa-graduation-cap"></i></li>{{/if}}
|
||||
<li data-item-id="{{advancement._id}}" class="item-control item-edit" title="{{localize 'l5r5e.global.edit'}}"><i class="fas fa-edit"></i></li>
|
||||
<li data-item-id="{{advancement._id}}" class="item-control item-delete" title="{{localize 'Delete'}}"><i class="fas fa-trash"></i></li>
|
||||
</ul>
|
||||
</td>
|
||||
{{/if}}
|
||||
</tr>
|
||||
@@ -1,14 +1,14 @@
|
||||
<tr data-group="advancements" data-tab="advancement_rank_{{rank}}" class="flexrow row advancement tab">
|
||||
<td class="name" name="advancement.name"><img src="{{advancement.img}}" title="{{advancement.name}}"> {{advancement.name}}</td>
|
||||
<td class="curriculum" name="curriculum">{{#if advancement.data.in_curriculum}}<i class="fas fa-graduation-cap"></i> {{/if}}</td>
|
||||
<td class="name" name="advancement.name"><img src="{{ advancement.img }}" title="{{ advancement.name }}"> {{ advancement.name }}</td>
|
||||
<td class="xp" name="advancement.xp">{{ advancement.data.xp_used }}</td>
|
||||
<td class="rank" name="advancement.rank">{{ advancement.data.rank }}</td>
|
||||
<td class="xp" name="advancement.xp">{{advancement.data.xp_used}}</td>
|
||||
<td class="rank" name="advancement.rank">{{advancement.data.rank}}</td>
|
||||
{{#if editable}}
|
||||
<td class="actions">
|
||||
<ul>
|
||||
<li data-item-id="{{advancement._id}}" class="item-control item-curriculum" title="{{localize 'l5r5e.advancements.curriculum'}}"><i class="fas fa-graduation-cap"></i></li>
|
||||
<li data-item-id="{{advancement._id}}" class="item-control item-edit" title="{{localize 'l5r5e.global.edit'}}"><i class="fas fa-edit"></i></li>
|
||||
<li data-item-id="{{advancement._id}}" class="item-control item-delete" title="{{localize 'l5r5e.global.delete'}}"><i class="fas fa-trash"></i></li>
|
||||
<li data-item-id="{{advancement._id}}" class="item-control item-delete" title="{{localize 'Delete'}}"><i class="fas fa-trash"></i></li>
|
||||
</ul>
|
||||
</td>
|
||||
{{/if}}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user