Compare commits

...

25 Commits

Author SHA1 Message Date
Mandar
6213064020 1.1.1 - The Huns War 2021-01-21 10:51:50 +01:00
Vlyan
b99e0ab952 Fix for initiative bug with cast 2021-01-21 09:21:53 +01:00
Vlyan
90ea03df33 Fix for textarea (Mandar !) 2021-01-20 23:28:06 +01:00
Mandar
a474c6caac System.json update before 1.1.0 2021-01-20 21:16:08 +01:00
Mandar
bc7c80f428 Update style button on dice + equipped + attributes 2021-01-20 21:04:11 +01:00
Vlyan
a5dd8e3eda Spanish specific: Added a disclaimer popup "not translated by Edge" 2021-01-20 17:19:42 +01:00
Vlyan
72e0d22a80 DP diff hidden lock by gm choice 2021-01-20 14:07:49 +01:00
Mandar
3fcfa8689d Fix 20Q line-height 2021-01-20 13:31:51 +01:00
Vlyan
acbb12333e Added System migration stuff
Some reorganisation
2021-01-20 12:38:50 +01:00
Mandar
289ec720de Add css trick border + Style for equiped and review for npc input. 2021-01-20 04:33:07 +01:00
Vlyan
8fbf7f9005 Use of toggleClass 2021-01-19 20:18:15 +01:00
Vlyan
71a3af85dd Xp not in curriculum are now rounded up (down before)
No more automation in stats for Npc (these cheaters !)
20Q Pushed the step3 item's limit to 20 (10 previous)
Gm Tool no longer stuck the escape key process
2021-01-19 12:10:04 +01:00
Vlyan
23db7ed2c2 Xp not in curriculum are now rounded up (down before) 2021-01-19 10:11:04 +01:00
Vlyan
cbd5af8d02 Added a visual indicator for equipped / readied
Now only equipped armor / weapon will show in conflict tab, and all armors/weapons now show in inventory tab
2021-01-17 17:47:42 +01:00
Vlyan
f6a91ab564 Initiative : Ring now limit the success 2021-01-17 16:29:26 +01:00
Vlyan
c8a37ab06f Gm dialog : not closable anymore (esc key) 2021-01-17 13:38:18 +01:00
Vlyan
78423770b1 Compendium : Added some referenced but missing item in core book, and weight 2021-01-17 13:26:07 +01:00
Vlyan
5444671bee Fix code and deleted margin for rank/ring in compendium 2021-01-17 11:38:43 +01:00
Mandar
d5b3a309b1 Style for Stance, dice difficulty, initiative 2021-01-17 01:07:00 +01:00
Vlyan
7fbce1500c Added : Change stance on DicePicker on initiative roll.
Some minors fixes
2021-01-16 13:26:43 +01:00
Vlyan
27e88be49d Initiative rework, with some broken css 2021-01-15 20:14:50 +01:00
Vlyan
58a4e71b32 Working on initiative, and now TN is global with GM tool 2021-01-14 21:55:42 +01:00
Vlyan
30950a0d63 Merge Update ES by Alejabar
Update es-es.json

See merge request teaml5r/l5r5e!2
2021-01-14 21:48:56 +01:00
Alejandro Barranquero
7411120841 Update es-es.json 2021-01-14 11:42:16 +00:00
Mandar
6a3431e6a0 Update Readme with screens 2021-01-13 01:31:07 +01:00
62 changed files with 1975 additions and 948 deletions

View File

@@ -1,15 +1,42 @@
# Changelog # Changelog
## 1.1.1 - The Huns War
- Fix Minion initiative
- Fix textarea ninjo/giri
## 1.1.0 - Initiative first !
- Added initiative system :
- Now use the score rule (the real one if you prefer)
- Added global modifiers for Characters, Adversary and Minons in the combat tracker : Confrontation types, Prepared
- Added sheet modifiers for Characters and Adversary: Prepared
- Initiative buttons in character sheet now display the DicePicker and do the initiative roll
- Change the actor stance on initiative roll in DicePicker
- Note : Due to the lack of the Roll & Keep system, the score is computed with the full success score.
- Spanish real translation by Alejabar (thanks !)
- Added a GM Dialog Tool for setting global difficulty (TN) value / hidden (with DicePicker live refresh)
- Compendium now display Ring and Rank if any in list view
- DicePicker :
- Fixed the initial display of "use a void point"
- No free void point anymore
- PC/NPC Sheet :
- Added a visual indicator for equipped / readied
- Now only equipped armor / weapon will show in conflict tab, and all armors/weapons now show in inventory tab
- Xp not in curriculum are now rounded up (down before)
- No more automation in stats for Npc (these cheaters !)
- 20Q Pushed the step3 item's limit to 20 (10 previous)
- Added System migration stuff
## 1.0.0 - First public release ## 1.0.0 - First public release
- Removed the 0ds if no skill point - Removed the 0ds if no skill point
- Added initiative roll (only tactics for the moment) - Added initiative roll (only tactics for the moment)
- Change color of keikogi and add on compendium - Change color of keikogi and add on compendium
- Machine translation for ES - Machine translation for ES
- Update Translation for 1.0.0 Release - Update Translation for 1.0.0 Release
- 20Q added step 7 and 17 no point rule - 20Q added step 7 and 17 no point rule
- Add price icon - Add price icon
- Set vigilance to 1 if compromised - Set vigilance to 1 if compromised
- Seamless update for 20Q (deleted refresh button) - Seamless update for 20Q (deleted refresh button)
- Update translation for npc + fix h1 - Update translation for npc + fix h1
- Update compendium : Remove accent on uppercase 1st letter - Update compendium : Remove accent on uppercase 1st letter
@@ -26,7 +53,7 @@
- Pass for number and focus on click - Pass for number and focus on click
- Xp, added some parseInt - Xp, added some parseInt
- Fix for babele and properties - Fix for babele and properties
- Add type percularity in item entry - Add type peculiarity in item entry
- Fix for cross-loaded French compendium - Fix for cross-loaded French compendium
- 20Q : Scroll on top on next button - 20Q : Scroll on top on next button
- V-Align for Vlyan pleasure ! - V-Align for Vlyan pleasure !
@@ -43,7 +70,7 @@
- Added babele french translation into system - Added babele french translation into system
- Removed DicePiker bulk macro as it was unnecessary now - Removed DicePiker bulk macro as it was unnecessary now
- Fix for Q13: "skill and disadv" OR "adv" - Fix for Q13: "skill and disadv" OR "adv"
- Added some text for 20Q 2dn dice - Added some text for 20Q 2dn dice
- Stop some missing propagation - Stop some missing propagation
- Fix adv tooltip - Fix adv tooltip
- Fix 20Q wrong var for summary - Fix 20Q wrong var for summary

View File

@@ -76,3 +76,10 @@ Vous êtes libre de contribuer et proposer après fork des corrections, modifica
1. Assurez-vous de bien être à jour par rapport à la branche référente. 1. Assurez-vous de bien être à jour par rapport à la branche référente.
2. Des messages de commit clair et précis permettent une relecture rapide du code. 2. Des messages de commit clair et précis permettent une relecture rapide du code.
3. Limitez-vous si possible à une Feature par demande de Merge pour ne pas bloquer le processus. 3. Limitez-vous si possible à une Feature par demande de Merge pour ne pas bloquer le processus.
Screens
![FoundryVTT Connection](https://cdn.discordapp.com/attachments/659430710146498583/798684216551407666/unknown.png)
![FoundryVTT L5r5e Character and Roll](https://cdn.discordapp.com/attachments/659430710146498583/798686668361039882/unknown.png)
![FoundryVTT L5r5e Sheets](https://cdn.discordapp.com/attachments/659430710146498583/798686880974503946/unknown.png)
![FoundryVTT L5r5e Itemss](https://cdn.discordapp.com/attachments/659430710146498583/798687268528848987/unknown.png)

486
package-lock.json generated
View File

@@ -732,43 +732,14 @@
"dev": true "dev": true
}, },
"node_modules/axios": { "node_modules/axios": {
"version": "0.19.0", "version": "0.21.1",
"resolved": "https://registry.npmjs.org/axios/-/axios-0.19.0.tgz", "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz",
"integrity": "sha512-1uvKqKQta3KBxIz14F2v06AEHZ/dIoeKfbTRkK1E5oqjDnuEerLmYTgJB5AiQZHJcljpg1TuRzdjDR06qNk0DQ==", "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==",
"deprecated": "Critical security vulnerability fixed in v0.21.1. For more information, see https://github.com/axios/axios/pull/3410",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"follow-redirects": "1.5.10", "follow-redirects": "^1.10.0"
"is-buffer": "^2.0.2"
} }
}, },
"node_modules/axios/node_modules/debug": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
"integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
"dev": true,
"dependencies": {
"ms": "2.0.0"
}
},
"node_modules/axios/node_modules/follow-redirects": {
"version": "1.5.10",
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz",
"integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==",
"dev": true,
"dependencies": {
"debug": "=3.1.0"
},
"engines": {
"node": ">=4.0"
}
},
"node_modules/axios/node_modules/ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
"dev": true
},
"node_modules/babel-eslint": { "node_modules/babel-eslint": {
"version": "10.1.0", "version": "10.1.0",
"resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz",
@@ -4681,29 +4652,6 @@
"node": ">=8" "node": ">=8"
} }
}, },
"node_modules/is-buffer": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz",
"integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==",
"dev": true,
"funding": [
{
"type": "github",
"url": "https://github.com/sponsors/feross"
},
{
"type": "patreon",
"url": "https://www.patreon.com/feross"
},
{
"type": "consulting",
"url": "https://feross.org/support"
}
],
"engines": {
"node": ">=4"
}
},
"node_modules/is-core-module": { "node_modules/is-core-module": {
"version": "2.2.0", "version": "2.2.0",
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz",
@@ -5410,15 +5358,15 @@
} }
}, },
"node_modules/localtunnel": { "node_modules/localtunnel": {
"version": "2.0.0", "version": "2.0.1",
"resolved": "https://registry.npmjs.org/localtunnel/-/localtunnel-2.0.0.tgz", "resolved": "https://registry.npmjs.org/localtunnel/-/localtunnel-2.0.1.tgz",
"integrity": "sha512-g6E0aLgYYDvQDxIjIXkgJo2+pHj3sGg4Wz/XP3h2KtZnRsWPbOQY+hw1H8Z91jep998fkcVE9l+kghO+97vllg==", "integrity": "sha512-LiaI5wZdz0xFkIQpXbNI62ZnNn8IMsVhwxHmhA+h4vj8R9JG/07bQHWwQlyy7b95/5fVOCHJfIHv+a5XnkvaJA==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"axios": "0.19.0", "axios": "0.21.1",
"debug": "4.1.1", "debug": "4.3.1",
"openurl": "1.1.1", "openurl": "1.1.1",
"yargs": "13.3.0" "yargs": "16.2.0"
}, },
"bin": { "bin": {
"lt": "bin/lt.js" "lt": "bin/lt.js"
@@ -5427,172 +5375,101 @@
"node": ">=8.3.0" "node": ">=8.3.0"
} }
}, },
"node_modules/localtunnel/node_modules/ansi-regex": { "node_modules/localtunnel/node_modules/ansi-styles": {
"version": "4.1.0", "version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true, "dev": true,
"dependencies": {
"color-convert": "^2.0.1"
},
"engines": { "engines": {
"node": ">=6" "node": ">=8"
} },
}, "funding": {
"node_modules/localtunnel/node_modules/camelcase": { "url": "https://github.com/chalk/ansi-styles?sponsor=1"
"version": "5.3.1",
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
"integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
"dev": true,
"engines": {
"node": ">=6"
} }
}, },
"node_modules/localtunnel/node_modules/cliui": { "node_modules/localtunnel/node_modules/cliui": {
"version": "5.0.0", "version": "7.0.4",
"resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
"integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"string-width": "^3.1.0", "string-width": "^4.2.0",
"strip-ansi": "^5.2.0", "strip-ansi": "^6.0.0",
"wrap-ansi": "^5.1.0" "wrap-ansi": "^7.0.0"
} }
}, },
"node_modules/localtunnel/node_modules/debug": { "node_modules/localtunnel/node_modules/color-convert": {
"version": "4.1.1", "version": "2.0.1",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"ms": "^2.1.1" "color-name": "~1.1.4"
},
"engines": {
"node": ">=7.0.0"
} }
}, },
"node_modules/localtunnel/node_modules/emoji-regex": { "node_modules/localtunnel/node_modules/color-name": {
"version": "7.0.3", "version": "1.1.4",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true "dev": true
}, },
"node_modules/localtunnel/node_modules/find-up": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
"integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
"dev": true,
"dependencies": {
"locate-path": "^3.0.0"
},
"engines": {
"node": ">=6"
}
},
"node_modules/localtunnel/node_modules/is-fullwidth-code-point": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
"integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
"dev": true,
"engines": {
"node": ">=4"
}
},
"node_modules/localtunnel/node_modules/locate-path": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
"integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
"dev": true,
"dependencies": {
"p-locate": "^3.0.0",
"path-exists": "^3.0.0"
},
"engines": {
"node": ">=6"
}
},
"node_modules/localtunnel/node_modules/p-locate": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
"integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
"dev": true,
"dependencies": {
"p-limit": "^2.0.0"
},
"engines": {
"node": ">=6"
}
},
"node_modules/localtunnel/node_modules/path-exists": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
"integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
"dev": true,
"engines": {
"node": ">=4"
}
},
"node_modules/localtunnel/node_modules/string-width": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
"integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
"dev": true,
"dependencies": {
"emoji-regex": "^7.0.1",
"is-fullwidth-code-point": "^2.0.0",
"strip-ansi": "^5.1.0"
},
"engines": {
"node": ">=6"
}
},
"node_modules/localtunnel/node_modules/strip-ansi": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
"integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
"dev": true,
"dependencies": {
"ansi-regex": "^4.1.0"
},
"engines": {
"node": ">=6"
}
},
"node_modules/localtunnel/node_modules/wrap-ansi": { "node_modules/localtunnel/node_modules/wrap-ansi": {
"version": "5.1.0", "version": "7.0.0",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
"integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"ansi-styles": "^3.2.0", "ansi-styles": "^4.0.0",
"string-width": "^3.0.0", "string-width": "^4.1.0",
"strip-ansi": "^5.0.0" "strip-ansi": "^6.0.0"
}, },
"engines": { "engines": {
"node": ">=6" "node": ">=10"
},
"funding": {
"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
}
},
"node_modules/localtunnel/node_modules/y18n": {
"version": "5.0.5",
"resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz",
"integrity": "sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==",
"dev": true,
"engines": {
"node": ">=10"
} }
}, },
"node_modules/localtunnel/node_modules/yargs": { "node_modules/localtunnel/node_modules/yargs": {
"version": "13.3.0", "version": "16.2.0",
"resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
"integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==", "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"cliui": "^5.0.0", "cliui": "^7.0.2",
"find-up": "^3.0.0", "escalade": "^3.1.1",
"get-caller-file": "^2.0.1", "get-caller-file": "^2.0.5",
"require-directory": "^2.1.1", "require-directory": "^2.1.1",
"require-main-filename": "^2.0.0", "string-width": "^4.2.0",
"set-blocking": "^2.0.0", "y18n": "^5.0.5",
"string-width": "^3.0.0", "yargs-parser": "^20.2.2"
"which-module": "^2.0.0", },
"y18n": "^4.0.0", "engines": {
"yargs-parser": "^13.1.1" "node": ">=10"
} }
}, },
"node_modules/localtunnel/node_modules/yargs-parser": { "node_modules/localtunnel/node_modules/yargs-parser": {
"version": "13.1.2", "version": "20.2.4",
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz",
"integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==",
"dev": true, "dev": true,
"dependencies": { "engines": {
"camelcase": "^5.0.0", "node": ">=10"
"decamelize": "^1.2.0"
} }
}, },
"node_modules/locate-path": { "node_modules/locate-path": {
@@ -10789,39 +10666,12 @@
"dev": true "dev": true
}, },
"axios": { "axios": {
"version": "0.19.0", "version": "0.21.1",
"resolved": "https://registry.npmjs.org/axios/-/axios-0.19.0.tgz", "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz",
"integrity": "sha512-1uvKqKQta3KBxIz14F2v06AEHZ/dIoeKfbTRkK1E5oqjDnuEerLmYTgJB5AiQZHJcljpg1TuRzdjDR06qNk0DQ==", "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==",
"dev": true, "dev": true,
"requires": { "requires": {
"follow-redirects": "1.5.10", "follow-redirects": "^1.10.0"
"is-buffer": "^2.0.2"
},
"dependencies": {
"debug": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
"integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
"dev": true,
"requires": {
"ms": "2.0.0"
}
},
"follow-redirects": {
"version": "1.5.10",
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz",
"integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==",
"dev": true,
"requires": {
"debug": "=3.1.0"
}
},
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
"dev": true
}
} }
}, },
"babel-eslint": { "babel-eslint": {
@@ -13977,12 +13827,6 @@
"binary-extensions": "^2.0.0" "binary-extensions": "^2.0.0"
} }
}, },
"is-buffer": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz",
"integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==",
"dev": true
},
"is-core-module": { "is-core-module": {
"version": "2.2.0", "version": "2.2.0",
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz",
@@ -14531,153 +14375,89 @@
} }
}, },
"localtunnel": { "localtunnel": {
"version": "2.0.0", "version": "2.0.1",
"resolved": "https://registry.npmjs.org/localtunnel/-/localtunnel-2.0.0.tgz", "resolved": "https://registry.npmjs.org/localtunnel/-/localtunnel-2.0.1.tgz",
"integrity": "sha512-g6E0aLgYYDvQDxIjIXkgJo2+pHj3sGg4Wz/XP3h2KtZnRsWPbOQY+hw1H8Z91jep998fkcVE9l+kghO+97vllg==", "integrity": "sha512-LiaI5wZdz0xFkIQpXbNI62ZnNn8IMsVhwxHmhA+h4vj8R9JG/07bQHWwQlyy7b95/5fVOCHJfIHv+a5XnkvaJA==",
"dev": true, "dev": true,
"requires": { "requires": {
"axios": "0.19.0", "axios": "0.21.1",
"debug": "4.1.1", "debug": "4.3.1",
"openurl": "1.1.1", "openurl": "1.1.1",
"yargs": "13.3.0" "yargs": "16.2.0"
}, },
"dependencies": { "dependencies": {
"ansi-regex": { "ansi-styles": {
"version": "4.1.0", "version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true "dev": true,
}, "requires": {
"camelcase": { "color-convert": "^2.0.1"
"version": "5.3.1", }
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
"integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
"dev": true
}, },
"cliui": { "cliui": {
"version": "5.0.0", "version": "7.0.4",
"resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
"integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
"dev": true, "dev": true,
"requires": { "requires": {
"string-width": "^3.1.0", "string-width": "^4.2.0",
"strip-ansi": "^5.2.0", "strip-ansi": "^6.0.0",
"wrap-ansi": "^5.1.0" "wrap-ansi": "^7.0.0"
} }
}, },
"debug": { "color-convert": {
"version": "4.1.1", "version": "2.0.1",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true, "dev": true,
"requires": { "requires": {
"ms": "^2.1.1" "color-name": "~1.1.4"
} }
}, },
"emoji-regex": { "color-name": {
"version": "7.0.3", "version": "1.1.4",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true "dev": true
}, },
"find-up": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
"integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
"dev": true,
"requires": {
"locate-path": "^3.0.0"
}
},
"is-fullwidth-code-point": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
"integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
"dev": true
},
"locate-path": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
"integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
"dev": true,
"requires": {
"p-locate": "^3.0.0",
"path-exists": "^3.0.0"
}
},
"p-locate": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
"integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
"dev": true,
"requires": {
"p-limit": "^2.0.0"
}
},
"path-exists": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
"integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
"dev": true
},
"string-width": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
"integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
"dev": true,
"requires": {
"emoji-regex": "^7.0.1",
"is-fullwidth-code-point": "^2.0.0",
"strip-ansi": "^5.1.0"
}
},
"strip-ansi": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
"integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
"dev": true,
"requires": {
"ansi-regex": "^4.1.0"
}
},
"wrap-ansi": { "wrap-ansi": {
"version": "5.1.0", "version": "7.0.0",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
"integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
"dev": true, "dev": true,
"requires": { "requires": {
"ansi-styles": "^3.2.0", "ansi-styles": "^4.0.0",
"string-width": "^3.0.0", "string-width": "^4.1.0",
"strip-ansi": "^5.0.0" "strip-ansi": "^6.0.0"
} }
}, },
"y18n": {
"version": "5.0.5",
"resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz",
"integrity": "sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==",
"dev": true
},
"yargs": { "yargs": {
"version": "13.3.0", "version": "16.2.0",
"resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
"integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==", "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
"dev": true, "dev": true,
"requires": { "requires": {
"cliui": "^5.0.0", "cliui": "^7.0.2",
"find-up": "^3.0.0", "escalade": "^3.1.1",
"get-caller-file": "^2.0.1", "get-caller-file": "^2.0.5",
"require-directory": "^2.1.1", "require-directory": "^2.1.1",
"require-main-filename": "^2.0.0", "string-width": "^4.2.0",
"set-blocking": "^2.0.0", "y18n": "^5.0.5",
"string-width": "^3.0.0", "yargs-parser": "^20.2.2"
"which-module": "^2.0.0",
"y18n": "^4.0.0",
"yargs-parser": "^13.1.1"
} }
}, },
"yargs-parser": { "yargs-parser": {
"version": "13.1.2", "version": "20.2.4",
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz",
"integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==",
"dev": true, "dev": true
"requires": {
"camelcase": "^5.0.0",
"decamelize": "^1.2.0"
}
} }
} }
}, },

View File

@@ -2,19 +2,14 @@
<!-- Generator: Adobe Illustrator 24.1.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> <!-- Generator: Adobe Illustrator 24.1.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" <svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="512px" height="512px" viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> width="512px" height="512px" viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
<path d="M115.6,20c-23.7,3.2-45.2,30.9-45.2,66.8c0,19.7,6.9,37.4,17,49.4l11.9,14.4l-18.4,3.4c-13.1,2.5-22.5,9.4-30.7,20.5 <g>
c-8.2,11.3-14.4,26.9-18.8,44.9c-8.1,32.6-9.8,72.5-10.1,107.7h43.5l11.9,159.6c30.2,6.9,62.4,6.6,91.6,0l10.6-159.6H220 <path d="M284.4,473.6c0-2.8,0-4.6,0-6.4c0-67.8,0.1-135.7-0.1-203.5c0-4.9,1.3-7.3,6.2-8.9c23.3-7.5,46.4-15.5,69.7-23
c0-35.7-0.5-76.1-7.7-109.1c-4-18-9.9-33.7-18.2-44.8c-8.3-11.1-18.3-17.9-33-20.1l-18.8-3l11.9-14.8c9.7-12.1,16-29.4,16-48.6 c4.9-1.6,6.6-3.9,6.3-8.9c-0.4-5.5-0.3-11,0-16.5c0.2-4.2-1.2-6.4-5.7-5.9c-0.7,0.1-1.3,0-2,0c-68.5,0-137,0-205.5,0
c0-38.3-24-66.7-50-66.7C120.3,20.1,115.6,20,115.6,20z"/> c-7.8,0-7.8,0-7.8,7.6c0,5.3,0.3,10.7-0.1,16c-0.3,4.1,1.5,5.9,5.2,7.1c23.6,7.7,47,15.7,70.6,23.3c4.7,1.5,6.4,3.6,6.4,8.7
<g transform="translate(0,0)"> c-0.2,68-0.1,136-0.1,204c0,1.7,0,3.5,0,6.3c-8.6-4.1-16.3-7.7-23.9-11.4C163.5,442.7,123.2,423,83,403.4
<path d="M360.6,41.8c-14.2,0-25.8,11.6-25.8,25.8c0,8.1,3.8,15.4,9.7,20.1h-24.2l-30.2,90.6h141l-30.2-90.6h-24.2 c-15.4-7.5-20.1-18-15.9-34.8c6-23.9,12.4-47.7,17.7-71.7c5.1-23.3,8-46.9,7.7-70.8c-0.5-30.2,9.3-56.8,27-80.9
c5.9-4.7,9.7-12,9.7-20.1C386.4,53.5,374.8,41.8,360.6,41.8z M360.6,53.2c8.1,0,14.5,6.4,14.5,14.5s-6.4,14.5-14.5,14.5 c20.7-28.1,46.6-50.8,75.4-70.1c18.2-12.2,37.5-22.8,56.3-34.2c3.3-2,6.2-2,9.7-0.1c38.6,20.1,74.6,44,105.9,74.5
c-8.1,0-14.5-6.4-14.5-14.5S352.5,53.2,360.6,53.2z M334.7,117h7.4v10.5l10.7-10.5h8.6l-13.8,13.6l15.2,15.1h-9.3l-11.4-11.3v11.3 c20.9,20.4,39,43.1,47.6,71.7c3,10.1,5,20.9,5.1,31.4c0.2,41.3,7.2,81.4,17.8,121.1c2.9,10.9,6.1,21.8,8.6,32.8
h-7.4V117L334.7,117z M372.5,123.7c1.5,0,2.8,0.3,4,0.9c1.1,0.6,2.2,1.5,3.1,2.8v-3.2h6.9v19.3c0,3.5-1.1,6.1-3.3,7.9 c3,13-2,23.7-13.8,29.6c-36.6,18-73.3,35.9-110,53.8c-10.6,5.2-21.3,10.3-31.9,15.5C288.6,471.7,287.1,472.4,284.4,473.6z"/>
c-2.2,1.8-5.3,2.7-9.5,2.7c-1.3,0-2.6-0.1-3.9-0.3c-1.3-0.2-2.5-0.5-3.8-0.9v-5.4c1.2,0.7,2.4,1.2,3.5,1.5c1.2,0.3,2.3,0.5,3.5,0.5
c2.3,0,3.9-0.5,5-1.5c1.1-1,1.6-2.5,1.6-4.6v-1.5c-0.9,1.3-2,2.2-3.1,2.8c-1.1,0.6-2.5,0.9-4,0.9c-2.6,0-4.8-1-6.5-3.1
c-1.7-2.1-2.6-4.7-2.6-7.9c0-3.2,0.9-5.8,2.6-7.9C367.7,124.8,369.8,123.7,372.5,123.7z M375,128.7c-1.4,0-2.5,0.5-3.3,1.6
c-0.8,1.1-1.2,2.5-1.2,4.5c0,2,0.4,3.5,1.2,4.5c0.8,1,1.9,1.5,3.4,1.5c1.4,0,2.5-0.5,3.3-1.6c0.8-1.1,1.2-2.5,1.2-4.4
c0-1.9-0.4-3.4-1.2-4.5C377.6,129.2,376.5,128.7,375,128.7L375,128.7z"/>
</g> </g>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@@ -58,6 +58,12 @@
"name": "Vêtements ordinaires", "name": "Vêtements ordinaires",
"description": "", "description": "",
"book_reference": "LdR p.239" "book_reference": "LdR p.239"
},
{
"id": "Inconspicuous garb",
"name": "Tenue discrète",
"description": "",
"book_reference": "LdR"
} }
] ]
} }

View File

@@ -184,6 +184,24 @@
"name": "Tente (Yourte)", "name": "Tente (Yourte)",
"description": "", "description": "",
"book_reference": "LdR p.245" "book_reference": "LdR p.245"
},
{
"id": "Scroll satchel",
"name": "Sacoche à rouleaux",
"description": "",
"book_reference": "LdR"
},
{
"id": "Traveling pack",
"name": "Sac de Voyage",
"description": "",
"book_reference": "LdR"
},
{
"id": "Journal of observations",
"name": "Journal d'observations",
"description": "",
"book_reference": "LdR"
} }
] ]
} }

View File

@@ -25,7 +25,8 @@
"add": "Add", "add": "Add",
"edit": "Edit", "edit": "Edit",
"delete": "Delete", "delete": "Delete",
"drop_here": "Drop here" "drop_here": "Drop here",
"edge_translation_disclaimer": ""
}, },
"logo": { "logo": {
"title": "Need help?", "title": "Need help?",
@@ -283,7 +284,11 @@
"intrigue": "Intrigue", "intrigue": "Intrigue",
"duel": "Duel", "duel": "Duel",
"skirmish": "Skirmish", "skirmish": "Skirmish",
"mass_battle": "Mass Battle" "mass_battle": "Mass Battle",
"prepared_true": "Prepared",
"prepared_false": "Surprised",
"prepared_null": "Defined in the character sheet (default)",
"already_set": "Your initiative has already been drawn"
} }
}, },
"advancements": { "advancements": {
@@ -299,11 +304,10 @@
"curriculum": "In curriculum", "curriculum": "In curriculum",
"curriculum_validate": "Complete this rank" "curriculum_validate": "Complete this rank"
}, },
"npc": { "character_types": {
"types": { "character": "Player Character",
"adversary": "Adversary", "adversary": "Adversary",
"minion": "Minion" "minion": "Minion"
}
}, },
"twenty_questions": { "twenty_questions": {
"title": "Twenty questions", "title": "Twenty questions",

View File

@@ -7,17 +7,17 @@
"None": "Sin opción" "None": "Sin opción"
}, },
"ACTOR": { "ACTOR": {
"TypeCharacter": "Carácter de Jugador", "TypeCharacter": "Personaje jugador",
"TypeNpc": "Personaje no jugador" "TypeNpc": "Personaje no jugador"
}, },
"ITEM": { "ITEM": {
"TypeItem": "Artículo", "TypeItem": "Objeto",
"TypeArmor": "Armadura", "TypeArmor": "Armadura",
"TypeWeapon": "Arma", "TypeWeapon": "Arma",
"TypeTechnique": "Técnica", "TypeTechnique": "Técnica",
"TypeProperty": "Propiedad", "TypeProperty": "Propiedad",
"TypePeculiarity": "Peculiaridad", "TypePeculiarity": "Peculiaridad",
"TypeAdvancement": "Avance" "TypeAdvancement": "Mejora"
}, },
"l5r5e": { "l5r5e": {
"global": { "global": {
@@ -25,21 +25,22 @@
"add": "Añadir", "add": "Añadir",
"edit": "Editar", "edit": "Editar",
"delete": "Borrar", "delete": "Borrar",
"drop_here": "Caída aquí" "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."
}, },
"logo": { "logo": {
"títle": "¿Necesitas ayuda?", "títle": "¿Necesitas ayuda?",
"content": "Sigue la guía :", "content": "Sigue la guía :",
"edge": "Ir a la página web de Edge-Studio", "edge": "Ir a la página web de Edge-Studio",
"drivethrurpg": "¿Comprar un PDF del juego?", "drivethrurpg": "¿Comprar un PDF del juego?",
"discord": "Discordia oficial de FoundryVTT", "discord": "Discord oficial de FoundryVTT",
"src": "systems/l5r5e/assets/l5r-logo.webp", "src": "systems/l5r5e/assets/l5r-logo.webp",
"alt": "Ayuda en línea", "alt": "Ayuda en línea",
"edge-info": "Tu navegador abrirá la página web de EDGE STUDIO", "edge-info": "Tu navegador abrirá la página web de EDGE STUDIO",
"edge-link": "https://edge-studio.net/", "edge-link": "https://edge-studio.net/",
"drivethrurpg-info": "tu navegador abrirá el sitio DriveThruRpg de Edge Studio", "drivethrurpg-info": "tu navegador abrirá el sitio DriveThruRpg de Edge Studio",
"drivethrurpg-link": "https://www.drivethrurpg.com/browse/pub/17946/EDGE-Studio", "drivethrurpg-link": "https://www.drivethrurpg.com/browse/pub/17946/EDGE-Studio",
"discord-info": "Su navegador se abrirá a la discordia oficial de la Fundición", "discord-info": "Su navegador se abrirá el discord oficial de Foundry",
"discord-link": "https://discordapp.com/invite/DDBZUDf" "discord-link": "https://discordapp.com/invite/DDBZUDf"
}, },
"rings": { "rings": {
@@ -67,75 +68,75 @@
"passionstip": "Después de efectuar una tirada relacionada con tu pasión, descarta tres puntos de Conflicto.", "passionstip": "Después de efectuar una tirada relacionada con tu pasión, descarta tres puntos de Conflicto.",
"personality": "Personalidad", "personality": "Personalidad",
"description": "Descripción", "description": "Descripción",
"bought_at_rank": "Comprado en rango", "bought_at_rank": "Adquirido en rango",
"effects": "Efectos", "effects": "Efectos",
"types": "Tipos", "types": "Tipos",
"book_reference": "Referencia", "book_reference": "Referencia",
"value": "Valor", "value": "Valor",
"rarity": "Rareza", "rarity": "Rareza",
"chatdices": { "chatdices": {
"successes": "Sucesos", "successes": "Éxitos",
"explosives": "Explosivos", "explosives": "Relanzables",
"opportunities": "Oportunidades", "opportunities": "Oportunidades",
"strives": "Esfuerzos", "strives": "Conflictos",
"difficulty": "TN", "difficulty": "NO",
"difficulty_hidden": "TN ???", "difficulty_hidden": "NO ???",
"dicepicker": "Recogedor de dados", "dicepicker": "Dice Picker",
"void_point_used": "Punto de vacío utilizado", "void_point_used": "Punto de vacío utilizado",
"roll_n_keep": "Roll & Keep", "roll_n_keep": "Tirar y guardar",
"initiative_roll": "Iniciativa rollo" "initiative_roll": "Tirada de Iniciativa"
}, },
"dicepicker": { "dicepicker": {
"difficulty_title": "Dificultad", "difficulty_title": "Dificultad",
"difficulty_hidden_label": "Ocultar TN", "difficulty_hidden_label": "Ocultar NO",
"use_void_point_label": "Gasta un", "use_void_point_label": "Gasta un",
"void_point_tooltip": "Punto vacío", "void_point_tooltip": "Punto de vacío",
"roll_label": "Roll", "roll_label": "Tirar",
"bt_add_macro": "Añadir un macro" "bt_add_macro": "Añadir una macro"
}, },
"roll_n_keep": { "roll_n_keep": {
"title": "L5R Roll & Keep", "title": "L5R Roll & Keep",
"discard_drop_here": "Descarte", "discard_drop_here": "Descartar",
"reroll_drop_here": "Re-roll", "reroll_drop_here": "Relanzar",
"reroll_chat": "Dados relaminados", "reroll_chat": "Dados relanzados",
"keep_drop_here": "Mantener", "keep_drop_here": "Guardar",
"keep_chat": "Nueva tirada de un dado explosivo", "keep_chat": "Nueva tirada de un dado relanzable",
"bt_validate": "Finalizar" "bt_validate": "Finalizar"
}, },
"max": "Max", "max": "Máx",
"current": "Actuales", "current": "Actuales",
"quantity": "Cantidad", "quantity": "Cantidad",
"weight": "Peso", "weight": "Peso",
"properties": "Propiedades", "properties": "Propiedades",
"weapons": { "weapons": {
"title": "Armas", "title": "Armas",
"title_new": "Arma nueva", "title_new": "Nueva arma",
"damage": "Daño", "damage": "Daño",
"range": "Rango", "range": "Alcance",
"stats": "Estadísticas", "stats": "Estadísticas",
"sheathed": "Equipado / Envainado", "sheathed": "Equipado / Envainada",
"readied": "Preparado", "readied": "Preparado",
"category": "Categoría", "category": "Categoría",
"deadliness": "Mortalidad", "deadliness": "Letalidad",
"grips": "Agarres" "grips": "Agarres"
}, },
"armors": { "armors": {
"title": "Armaduras", "title": "Armaduras",
"title_new": "Nueva Armadura", "title_new": "Nueva Armadura",
"type": "Defensa", "type": "Defensa",
"physical": "físico", "physical": "física",
"supernatural": "sobrenatural", "supernatural": "sobrenatural",
"equipped": "Equipado" "equipped": "Equipado"
}, },
"items": { "items": {
"title": "Artículos", "title": "Objetos",
"title_new": "nuevo artículo" "title_new": "Nuevo objeto"
}, },
"feats": "Hechos", "feats": "Logros",
"techniques": { "techniques": {
"title": "Técnicas", "title": "Técnicas",
"type": "Tipo accesible", "type": "Técnicas permitidas",
"not_allowed": "Tu personaje no utiliza este tipo de técnica.", "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.", "only_one": "Tu personaje sólo puede poseer una de estas técnicas.",
"title_new": "Nueva Técnica", "title_new": "Nueva Técnica",
"kata": "Kata", "kata": "Kata",
@@ -208,7 +209,7 @@
"ranged": "A distancia", "ranged": "A distancia",
"unarmed": "Sin armas", "unarmed": "Sin armas",
"meditation": "Meditación", "meditation": "Meditación",
"tactics": "Tácticas", "tactics": "Estrategia",
"air": "Amagar", "air": "Amagar",
"earth": "Resistir", "earth": "Resistir",
"fire": "Abrumar", "fire": "Abrumar",
@@ -255,7 +256,7 @@
} }
}, },
"attributes": { "attributes": {
"title": "Attributes", "title": "Atributos",
"endurance": "Aguante", "endurance": "Aguante",
"endurancetip": "(Tierra + Fuego) x2", "endurancetip": "(Tierra + Fuego) x2",
"composure": "Compostura", "composure": "Compostura",
@@ -283,7 +284,11 @@
"intrigue": "Intriga", "intrigue": "Intriga",
"duel": "Duelo", "duel": "Duelo",
"skirmish": "Escaramuza", "skirmish": "Escaramuza",
"mass_battle": "Batalla en masas" "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"
} }
}, },
"advancements": { "advancements": {
@@ -292,94 +297,93 @@
"school_rank": "Rango de la escuela", "school_rank": "Rango de la escuela",
"school_rank_0": "Bg", "school_rank_0": "Bg",
"total": "Total", "total": "Total",
"cost": "Costo", "cost": "Coste",
"spent": "Usada", "spent": "Gastado",
"saved": "Salvado", "saved": "Guardado",
"total_xp_rank": "Xp gastado", "total_xp_rank": "PE gastados",
"curriculum": "En curriculum", "curriculum": "En programa de estudio",
"curriculum_validate": "Completar este rango" "curriculum_validate": "Completar este rango"
}, },
"npc": { "character_types": {
"types": { "character": "Personaje jugador",
"adversary": "Adversario", "adversary": "Adversario",
"minion": "Adlátere" "minion": "Esbirro"
}
}, },
"twenty_questions": { "twenty_questions": {
"title": "Veinte preguntas", "title": "Veinte preguntas",
"bt_abrev": "20Q", "bt_abrev": "20P",
"bt_next": "Siguiente", "bt_next": "Siguiente",
"increase_ring1": "Aumento del anillo (1)", "increase_ring1": "Incremento de anillo (1)",
"increase_ring2": "Aumento del anillo (2)", "increase_ring2": "Incremento de anillo (2)",
"increase_skill1": "Aumenta la habilidad (1)", "increase_skill1": "Incremento de habilidad (1)",
"increase_skill2": "Aumenta la habilidad (2)", "increase_skill2": "Incremento de habilidad (2)",
"increase_skill3": "Aumenta la habilidad (3-5)", "increase_skill3": "Incremento de habilidad (3-5)",
"choose_one_ring": "Elige uno", "choose_one_ring": "Elige uno",
"choose_one_skill": "Elige uno", "choose_one_skill": "Elige una",
"or": "O", "or": "O",
"and": "Y", "and": "Y",
"error": "Uy, parece que hay un error:", "error": "Uy, parece que hay un error:",
"part0": { "part0": {
"intro": "Puedes usar esta hoja para rellenar tus respuestas al Juego de las 20 Preguntas, y para tomar notas para más tarde!", "intro": "Puedes usar esta hoja para rellenar tus respuestas al Juego de las 20 Preguntas, y para tomar notas para más tarde!",
"section": "Leyenda de los Cinco Anillos, capítulo 2: Creación de un personaje, p. 41-95" "section": "Leyenda de los Cinco Anillos, capítulo 2: Creación de personajes, p. 41-95"
}, },
"part1": { "part1": {
"title": "Parte I: Identidad básica (Clan y Familia)", "title": "Parte I: Identidad básica (Clan y Familia)",
"q1": "1. ¿A qué clan pertenece tu personaje? (p. 41)", "q1": "1. ¿A qué clan pertenece tu personaje? (p. 41)",
"status": "Estado", "status": "Estatus",
"q2": "2. ¿A qué familia pertenece tu personaje? (p. 49)", "q2": "2. ¿A qué familia pertenece tu personaje? (p. 49)",
"money": "Iniciar la riqueza en Koku", "money": "Riqueza inicial en Koku",
"glory": "Gloria" "glory": "Gloria"
}, },
"part2": { "part2": {
"title": "Parte II: Papel y escuela", "title": "Parte II: Función y escuela",
"q3": "3. ¿Cuál es la escuela de tu personaje, y en qué roles se encuentra esa escuela? (p. 56)", "q3": "3. ¿Cuál es la escuela de tu personaje, y en qué funciones cumple esa escuela? (p. 56)",
"school": "Escuela", "school": "Escuela",
"role": "Roles", "role": "Funciones",
"honor": "Honor", "honor": "Honor",
"access": "Tipos de técnicas disponibles", "access": "Tipos de técnicas disponibles",
"school_ability": "Habilidad escolar", "school_ability": "Capacidad de escuela",
"starting_techniques": "Técnicas de arranque (2-5)", "starting_techniques": "Técnicas iniciales (2-5)",
"outfit": "Equipo para empezar", "outfit": "Equipo inicial",
"q4": "4. ¿Cómo se destaca tu personaje dentro de su escuela? (p. 88)" "q4": "4. ¿De qué manera destaca tu personaje dentro de su escuela? (p. 88)"
}, },
"part3": { "part3": {
"title": "Parte III: Honor y Gloria", "title": "Parte III: Honor y Gloria",
"q5": "5. ¿Quién es su señor y cuál es su deber de carácter con ellos? (p. 88)", "q5": "5. ¿Quién es tu señor y cuál es el deber de tu personaje hacia él? (p. 88)",
"choose_giri": "Elija una giri:", "choose_giri": "Elige un giri:",
"q6": "6. ¿Qué anhela su personaje y cómo podría esto impedir su deber? (p. 90)", "q6": "6. ¿Qué es lo que anhela tu personaje, y cómo podría esto interferir con su deber? (p. 90)",
"choose_ninjo": "Elija una ninjō:", "choose_ninjo": "Elige un ninjō:",
"q7": "7. ¿Cuál es la relación de tu personaje con su clan? (p. 91)", "q7": "7. ¿Cuál es la relación de tu personaje con tu clan? (p. 91)",
"increase_glory": "Aumento de la gloria", "increase_glory": "Aumento de la gloria",
"q8": "8. ¿Qué piensa tu personaje de Bushidō? (p. 91)", "q8": "8. ¿Qué piensa tu personaje acerca del Bushidō? (p. 91)",
"increase_honor": "Aumento del honor" "increase_honor": "Aumento del honor"
}, },
"part4": { "part4": {
"title": "Parte IV: Fortalezas y Debilidades", "title": "Parte IV: Fortalezas y Debilidades",
"q9": "9. ¿Cuál es el mayor logro de su personaje hasta ahora? (p. 92)", "q9": "9. ¿Cuál es el mayor logro de tu personaje hasta ahora? (p. 92)",
"distinction": "Distinción (1)", "distinction": "Distinción (1)",
"q10": "10. ¿Qué es lo que más te frena en la vida? (p. 92)", "q10": "10. ¿Qué es lo que más frena a tu personaje en la vida? (p. 92)",
"adversity": "Adversidad (1)", "adversity": "Adversidad (1)",
"q11": "11. ¿Qué actividad hace que tu personaje se sienta más en paz? (p. 93)", "q11": "11. ¿Qué actividad hace que tu personaje se sienta más en paz? (p. 93)",
"passion": "Pasión (1)", "passion": "Pasión (1)",
"q12": "12. ¿Qué preocupación, miedo o falta de sensibilidad le preocupa más a su carácter? (p. 93)", "q12": "12. ¿Qué preocupación, miedo o debilidad perturba más a tu personaje? (p. 93)",
"anxiety": "Ansiedad (1)", "anxiety": "Ansiedad (1)",
"q13": "13. De quién ha aprendido más tu personaje durante su vida (p. 93)", "q13": "13. ¿Quién ha sido la persona de la que más ha aprendido tu personaje en el transcurso de su vida? (p. 93)",
"disadvantage": "Desventaja (1)", "disadvantage": "Desventaja (1)",
"advantage": "Ventaja (1)" "advantage": "Ventaja (1)"
}, },
"part5": { "part5": {
"title": "Parte V: Personalidad y Comportamiento", "title": "Parte V: Personalidad y Comportamiento",
"q14": "14. ¿Qué es lo primero que la gente nota al encontrarse con su personaje? (p. 93)", "q14": "14. ¿Qué es lo que advierte primero la gente al encontrarse con tu personaje? (p. 93)",
"accoutrement": "Acumulación personal", "accoutrement": "Accesorio estético distintivo",
"q15": "15. ¿Cómo reacciona tu personaje ante situaciones estresantes? (p. 94)", "q15": "15. ¿Cómo reacciona tu personaje ante situaciones de tensión? (p. 94)",
"q16": "16. ¿Cuáles son las relaciones preexistentes de tu personaje con otros clanes, familias, organizaciones y tradiciones? (p. 94)", "q16": "16. ¿Cuáles son las relaciones previas de tu personaje con otros clanes, familias, organizaciones y tradiciones? (p. 94)",
"object": "Objeto (Rareza 7 o inferior)" "object": "Objeto (Rareza 7 o inferior)"
}, },
"part6": { "part6": {
"title": "Parte VI: Ascendencia y familia", "title": "Parte VI: Ascestros y familia",
"q17": "17. ¿Cómo los describirían los padres de tu personaje? (p. 95)", "q17": "17. ¿Cómo describirían sus padres a tu personaje? (p. 95)",
"q18": "18. ¿A quién se le nombró para honrar a tu personaje? (p. 95)", "q18": "18. ¿En honor de quién se eligio el nombre de tu personaje? (p. 95)",
"d10r1": "Resultado D10 (1/2)", "d10r1": "Resultado D10 (1/2)",
"d10r1_choice": "Primer efecto de D10", "d10r1_choice": "Primer efecto de D10",
"d10r2": "Resultado D10 (2/2)", "d10r2": "Resultado D10 (2/2)",
@@ -389,7 +393,7 @@
}, },
"part7": { "part7": {
"title": "Parte VII: Muerte", "title": "Parte VII: Muerte",
"q20": "20. ¿Cómo debe morir tu personaje? (p. 95)", "q20": "20. ¿Cómo debería morir tu personaje? (p. 95)",
"summary": "Resumen", "summary": "Resumen",
"generchar": "Generar el personaje", "generchar": "Generar el personaje",
"generchar_disclaimer": "Advertencia, esto borrará los datos actuales del personaje!", "generchar_disclaimer": "Advertencia, esto borrará los datos actuales del personaje!",

View File

@@ -25,7 +25,8 @@
"add": "Ajouter", "add": "Ajouter",
"edit": "Modifier", "edit": "Modifier",
"delete": "Supprimer", "delete": "Supprimer",
"drop_here": "Déposez ici" "drop_here": "Déposez ici",
"edge_translation_disclaimer": ""
}, },
"logo": { "logo": {
"title": "Besoin d'aide ?", "title": "Besoin d'aide ?",
@@ -163,7 +164,7 @@
"notes": "Notes", "notes": "Notes",
"inventory": "Inventaire", "inventory": "Inventaire",
"money": { "money": {
"title": "Fortune personnelle", "title": "Fortune",
"koku": "Koku", "koku": "Koku",
"bu": "Bu", "bu": "Bu",
"zeni": "Zeni" "zeni": "Zeni"
@@ -283,7 +284,11 @@
"intrigue": "Intrigue", "intrigue": "Intrigue",
"duel": "Duel", "duel": "Duel",
"skirmish": "Escarmouche", "skirmish": "Escarmouche",
"mass_battle": "Bataille rangée" "mass_battle": "Bataille rangée",
"prepared_true": "Prêt(e)",
"prepared_false": "Surpris(e)",
"prepared_null": "Défini par la fiche de personnage (défaut)",
"already_set": "Votre initiative a déjà été tirée"
} }
}, },
"advancements": { "advancements": {
@@ -299,11 +304,10 @@
"curriculum": "Inclus dans le cursus", "curriculum": "Inclus dans le cursus",
"curriculum_validate": "Valider la progression" "curriculum_validate": "Valider la progression"
}, },
"npc": { "character_types": {
"types": { "character": "Personnage Joueur",
"adversary": "Antagoniste", "adversary": "Antagoniste",
"minion": "Sous-fifre" "minion": "Sous-fifre"
}
}, },
"twenty_questions": { "twenty_questions": {
"title": "Le jeu des Vingt questions", "title": "Le jeu des Vingt questions",

View File

@@ -1,9 +1,10 @@
{"_id":"L5RCoreArm000001","name":"Ashigaru Armor","permission":{"default":0},"type":"armor","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"3","zeni":"5 koku","properties":[{"id":"L5RCorePro000011","name":"Wargear"}],"armor":{"physical":"3","supernatural":"-"},"description":"","book_reference":"Core p.239"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/armor.svg","effects":[]} {"_id":"L5RCoreArm000001","name":"Ashigaru Armor","permission":{"default":0},"type":"armor","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"3","zeni":"5 koku","properties":[{"id":"L5RCorePro000011","name":"Wargear"}],"armor":{"physical":"3","supernatural":"-"},"description":"","book_reference":"Core p.239"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/armor.svg","effects":[]}
{"_id":"L5RCoreArm000002","name":"Plated Armor","permission":{"default":0},"type":"armor","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"8","zeni":"40 koku","properties":[{"id":"L5RCorePro000006","name":"Cumbersome"},{"id":"L5RCorePro000015","name":" Durable"},{"id":"L5RCorePro000011","name":" Wargear"}],"armor":{"physical":"5","supernatural":"-"},"description":"","book_reference":"Core p.239"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/armor.svg","effects":[]} {"_id":"L5RCoreArm000002","name":"Plated Armor","permission":{"default":0},"type":"armor","data":{"equipped":false,"quantity":1,"weight":"2","rarity":"8","zeni":"40 koku","properties":[{"id":"L5RCorePro000006","name":"Cumbersome"},{"id":"L5RCorePro000015","name":" Durable"},{"id":"L5RCorePro000011","name":" Wargear"}],"armor":{"physical":"5","supernatural":"-"},"description":"","book_reference":"Core p.239"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/armor.svg","effects":[]}
{"_id":"L5RCoreArm000003","name":"Concealed Armor","permission":{"default":0},"type":"armor","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"4","zeni":"5 koku","properties":[{"id":"L5RCorePro000005","name":"Concealable"}],"armor":{"physical":"2","supernatural":"-"},"description":"","book_reference":"Core p.239"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/armor.svg","effects":[]} {"_id":"L5RCoreArm000003","name":"Concealed Armor","permission":{"default":0},"type":"armor","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"4","zeni":"5 koku","properties":[{"id":"L5RCorePro000005","name":"Concealable"}],"armor":{"physical":"2","supernatural":"-"},"description":"","book_reference":"Core p.239"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/armor.svg","effects":[]}
{"_id":"L5RCoreArm000004","name":"Lacquered Armor","permission":{"default":0},"type":"armor","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"6","zeni":"25 koku","properties":[{"id":"L5RCorePro000002","name":"Ceremonial"},{"id":"L5RCorePro000006","name":" Cumbersome"},{"id":"L5RCorePro000011","name":" Wargear"}],"armor":{"physical":"4","supernatural":"-"},"description":"","book_reference":"Core p.239"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/armor.svg","effects":[]} {"_id":"L5RCoreArm000004","name":"Lacquered Armor","permission":{"default":0},"type":"armor","data":{"equipped":false,"quantity":1,"weight":"2","rarity":"6","zeni":"25 koku","properties":[{"id":"L5RCorePro000002","name":"Ceremonial"},{"id":"L5RCorePro000006","name":" Cumbersome"},{"id":"L5RCorePro000011","name":" Wargear"}],"armor":{"physical":"4","supernatural":"-"},"description":"","book_reference":"Core p.239"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/armor.svg","effects":[]}
{"_id":"L5RCoreArm000005","name":"Ceremonial Clothes","permission":{"default":0},"type":"armor","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"4","zeni":"1 koku","properties":[{"id":"L5RCorePro000002","name":"Ceremonial"},{"id":"L5RCorePro000010","name":" Resplendent"}],"armor":{"physical":"1","supernatural":"-"},"description":"","book_reference":"Core p.239"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/keikogi.svg","effects":[]} {"_id":"L5RCoreArm000005","name":"Ceremonial Clothes","permission":{"default":0},"type":"armor","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"4","zeni":"1 koku","properties":[{"id":"L5RCorePro000002","name":"Ceremonial"},{"id":"L5RCorePro000010","name":" Resplendent"}],"armor":{"physical":"1","supernatural":"-"},"description":"","book_reference":"Core p.239"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/keikogi.svg","effects":[]}
{"_id":"L5RCoreArm000006","name":"Traveling Clothes","permission":{"default":0},"type":"armor","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"2","zeni":"2 bu","properties":[{"id":"L5RCorePro000015","name":"Durable"},{"id":"L5RCorePro000012","name":" Mundane"},{"id":"L5RCorePro000016","name":" Subtle"}],"armor":{"physical":"2","supernatural":"-"},"description":"","book_reference":"Core p.239"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/keikogi.svg","effects":[]} {"_id":"L5RCoreArm000006","name":"Traveling Clothes","permission":{"default":0},"type":"armor","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"2","zeni":"2 bu","properties":[{"id":"L5RCorePro000015","name":"Durable"},{"id":"L5RCorePro000012","name":" Mundane"},{"id":"L5RCorePro000016","name":" Subtle"}],"armor":{"physical":"2","supernatural":"-"},"description":"","book_reference":"Core p.239"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/keikogi.svg","effects":[]}
{"_id":"L5RCoreArm000007","name":"Sanctified Robes","permission":{"default":0},"type":"armor","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"7","zeni":"4 koku","properties":[{"id":"L5RCorePro000002","name":"Ceremonial"}],"armor":{"physical":"1","supernatural":"3"},"description":"","book_reference":"Core p.239"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/keikogi.svg","effects":[]} {"_id":"L5RCoreArm000007","name":"Sanctified Robes","permission":{"default":0},"type":"armor","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"7","zeni":"4 koku","properties":[{"id":"L5RCorePro000002","name":"Ceremonial"}],"armor":{"physical":"1","supernatural":"3"},"description":"","book_reference":"Core p.239"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/keikogi.svg","effects":[]}
{"_id":"L5RCoreArm000008","name":"Sleeping Garb","permission":{"default":0},"type":"armor","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"2","zeni":"1 koku","properties":[],"armor":{"physical":"-","supernatural":""},"description":"","book_reference":"Core p.239"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/keikogi.svg","effects":[]} {"_id":"L5RCoreArm000008","name":"Sleeping Garb","permission":{"default":0},"type":"armor","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"2","zeni":"1 koku","properties":[],"armor":{"physical":"-","supernatural":""},"description":"","book_reference":"Core p.239"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/keikogi.svg","effects":[]}
{"_id":"L5RCoreArm000009","name":"Common Clothes","permission":{"default":0},"type":"armor","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"1","zeni":"1 bu","properties":[{"id":"L5RCorePro000012","name":"Mundane"}],"armor":{"physical":"1","supernatural":"-"},"description":"","book_reference":"Core p.239"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/keikogi.svg","effects":[]} {"_id":"L5RCoreArm000009","name":"Common Clothes","permission":{"default":0},"type":"armor","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"1","zeni":"1 bu","properties":[{"id":"L5RCorePro000012","name":"Mundane"}],"armor":{"physical":"1","supernatural":"-"},"description":"","book_reference":"Core p.239"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/keikogi.svg","effects":[]}
{"_id":"L5RCoreArm000010","name":"Inconspicuous garb","permission":{"default":0},"type":"armor","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"3","zeni":"3 bu","properties":[{"id":"L5RCorePro000016","name":"Subtle"}],"armor":{"physical":"-","supernatural":"-"},"description":"","book_reference":"Core"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/keikogi.svg","effects":[]}

View File

@@ -5,26 +5,29 @@
{"_id":"L5RCoreIte000005","name":"Rope (By the Foot)","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"1","zeni":"5-20 zeni","properties":[],"description":"","book_reference":"Core p.244"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]} {"_id":"L5RCoreIte000005","name":"Rope (By the Foot)","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"1","zeni":"5-20 zeni","properties":[],"description":"","book_reference":"Core p.244"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]}
{"_id":"L5RCoreIte000006","name":"Sake Cup","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"2","zeni":"1 bu","properties":[],"description":"","book_reference":"Core p.245"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]} {"_id":"L5RCoreIte000006","name":"Sake Cup","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"2","zeni":"1 bu","properties":[],"description":"","book_reference":"Core p.245"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]}
{"_id":"L5RCoreIte000007","name":"Lucky Cricket","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"4","zeni":"4 bu","properties":[],"description":"","book_reference":"Core p.242"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]} {"_id":"L5RCoreIte000007","name":"Lucky Cricket","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"4","zeni":"4 bu","properties":[],"description":"","book_reference":"Core p.242"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]}
{"_id":"L5RCoreIte000008","name":"Bottle of Sake","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"1","zeni":"1 bu","properties":[],"description":"","book_reference":"Core p.242"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]} {"_id":"L5RCoreIte000008","name":"Bottle of Sake","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"1","zeni":"1 bu","properties":[],"description":"","book_reference":"Core p.242"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]}
{"_id":"L5RCoreIte000009","name":"Dice and Cup","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"2","zeni":"25 zeni","properties":[],"description":"","book_reference":"Core p.242"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]} {"_id":"L5RCoreIte000009","name":"Dice and Cup","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"2","zeni":"25 zeni","properties":[],"description":"","book_reference":"Core p.242"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]}
{"_id":"L5RCoreIte000010","name":"Sweets (Four Servings)","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"1","zeni":"1 bu","properties":[],"description":"","book_reference":"Core p.245"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]} {"_id":"L5RCoreIte000010","name":"Sweets (Four Servings)","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"1","zeni":"1 bu","properties":[],"description":"","book_reference":"Core p.245"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]}
{"_id":"L5RCoreIte000011","name":"Spices","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"5-7","zeni":"1-5 bu","properties":[],"description":"","book_reference":"Core p.245"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]} {"_id":"L5RCoreIte000011","name":"Spices","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"5-7","zeni":"1-5 bu","properties":[],"description":"","book_reference":"Core p.245"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]}
{"_id":"L5RCoreIte000012","name":"Musical Instrument","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"2-6","zeni":"1-5 bu","properties":[],"description":"","book_reference":"Core p.243"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]} {"_id":"L5RCoreIte000012","name":"Musical Instrument","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"2-6","zeni":"1-5 bu","properties":[],"description":"","book_reference":"Core p.243"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]}
{"_id":"L5RCoreIte000013","name":"Games","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"3","zeni":"1 bu","properties":[],"description":"","book_reference":"Core p.242"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]} {"_id":"L5RCoreIte000013","name":"Games","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"3","zeni":"1 bu","properties":[],"description":"","book_reference":"Core p.242"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]}
{"_id":"L5RCoreIte000014","name":"Kubi Bukuro","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"2","zeni":"2 zeni","properties":[{"id":"L5RCorePro000011","name":"Wargear"}],"description":"","book_reference":"Core p.242"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]} {"_id":"L5RCoreIte000014","name":"Kubi Bukuro","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"2","zeni":"2 zeni","properties":[{"id":"L5RCorePro000011","name":"Wargear"}],"description":"","book_reference":"Core p.242"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]}
{"_id":"L5RCoreIte000015","name":"Pillow Book","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"2","zeni":"3 zeni","properties":[],"description":"","book_reference":"Core p.243"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]} {"_id":"L5RCoreIte000015","name":"Pillow Book","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"2","zeni":"3 zeni","properties":[],"description":"","book_reference":"Core p.243"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]}
{"_id":"L5RCoreIte000016","name":"Bowyers Kit","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"1","zeni":"1 bu","properties":[],"description":"","book_reference":"Core p.242"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]} {"_id":"L5RCoreIte000016","name":"Bowyers Kit","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"1","zeni":"1 bu","properties":[],"description":"","book_reference":"Core p.242"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]}
{"_id":"L5RCoreIte000017","name":"Calligraphy Set","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"3","zeni":"1 bu","properties":[],"description":"","book_reference":"Core p.242"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]} {"_id":"L5RCoreIte000017","name":"Calligraphy Set","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"3","zeni":"1 bu","properties":[],"description":"","book_reference":"Core p.242"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]}
{"_id":"L5RCoreIte000018","name":"Divination Kit","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"4","zeni":"1 bu","properties":[],"description":"","book_reference":"Core p.242"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]} {"_id":"L5RCoreIte000018","name":"Divination Kit","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"4","zeni":"1 bu","properties":[],"description":"","book_reference":"Core p.242"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]}
{"_id":"L5RCoreIte000019","name":"Medicine Kit","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"3","zeni":"1 bu","properties":[],"description":"","book_reference":"Core p.243"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]} {"_id":"L5RCoreIte000019","name":"Medicine Kit","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"3","zeni":"1 bu","properties":[],"description":"","book_reference":"Core p.243"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]}
{"_id":"L5RCoreIte000020","name":"Omamori","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"2","zeni":"5 bu","properties":[],"description":"","book_reference":"Core p.243"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]} {"_id":"L5RCoreIte000020","name":"Omamori","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"2","zeni":"5 bu","properties":[],"description":"","book_reference":"Core p.243"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]}
{"_id":"L5RCoreIte000021","name":"Umbrella","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"4","zeni":"2 bu","properties":[],"description":"","book_reference":"Core p.245"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]} {"_id":"L5RCoreIte000021","name":"Umbrella","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"4","zeni":"2 bu","properties":[],"description":"","book_reference":"Core p.245"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]}
{"_id":"L5RCoreIte000022","name":"Whetstone","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"1","zeni":"1 zeni","properties":[],"description":"","book_reference":"Core p.245"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]} {"_id":"L5RCoreIte000022","name":"Whetstone","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"1","zeni":"1 zeni","properties":[],"description":"","book_reference":"Core p.245"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]}
{"_id":"L5RCoreIte000023","name":"Poison (One Vial)","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"5","zeni":"30 zeni","properties":[{"id":"L5RCorePro000009","name":"Forbidden"}],"description":"","book_reference":"Core p.244"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]} {"_id":"L5RCoreIte000023","name":"Poison (One Vial)","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"5","zeni":"30 zeni","properties":[{"id":"L5RCorePro000009","name":"Forbidden"}],"description":"","book_reference":"Core p.244"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]}
{"_id":"L5RCoreIte000024","name":"Daishō Stand","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"4","zeni":"1 koku","properties":[],"description":"","book_reference":"Core p.242"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]} {"_id":"L5RCoreIte000024","name":"Daishō Stand","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"4","zeni":"1 koku","properties":[],"description":"","book_reference":"Core p.242"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]}
{"_id":"L5RCoreIte000025","name":"Traveling Rations","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"1","zeni":"5 zeni","properties":[],"description":"","book_reference":"Core p.245"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]} {"_id":"L5RCoreIte000025","name":"Traveling Rations","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"1","zeni":"5 zeni","properties":[],"description":"","book_reference":"Core p.245"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]}
{"_id":"L5RCoreIte000026","name":"Personal Seal or Chop","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"6","zeni":"4 bu","properties":[{"id":"L5RCorePro000002","name":"Ceremonial"}],"description":"","book_reference":"Core p.243"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]} {"_id":"L5RCoreIte000026","name":"Personal Seal or Chop","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"6","zeni":"4 bu","properties":[{"id":"L5RCorePro000002","name":"Ceremonial"}],"description":"","book_reference":"Core p.243"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]}
{"_id":"L5RCoreIte000027","name":"Tea Set (Portable)","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"6","zeni":"1 koku","properties":[],"description":"","book_reference":"Core p.245"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]} {"_id":"L5RCoreIte000027","name":"Tea Set (Portable)","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"6","zeni":"1 koku","properties":[],"description":"","book_reference":"Core p.245"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]}
{"_id":"L5RCoreIte000028","name":"Tent (Chomchong)","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"7","zeni":"20 koku","properties":[],"description":"","book_reference":"Core p.245"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]} {"_id":"L5RCoreIte000028","name":"Tent (Chomchong)","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"2","rarity":"7","zeni":"20 koku","properties":[],"description":"","book_reference":"Core p.245"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]}
{"_id":"L5RCoreIte000029","name":"Tent (Small)","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"3","zeni":"1 koku","properties":[],"description":"","book_reference":"Core p.245"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]} {"_id":"L5RCoreIte000029","name":"Tent (Small)","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"3","zeni":"1 koku","properties":[],"description":"","book_reference":"Core p.245"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]}
{"_id":"L5RCoreIte000030","name":"Tent (Yurt)","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"5","zeni":"10 koku","properties":[],"description":"","book_reference":"Core p.245"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]} {"_id":"L5RCoreIte000030","name":"Tent (Yurt)","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"2","rarity":"5","zeni":"10 koku","properties":[],"description":"","book_reference":"Core p.245"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]}
{"_id":"L5RCoreIte000031","name":"Scroll satchel","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"3","zeni":"1 bu","properties":[],"description":"","book_reference":"Core"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]}
{"_id":"L5RCoreIte000032","name":"Traveling pack","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"1","zeni":"10 koku","properties":[{"id":"L5RCorePro000012","name":"Mundane"}],"description":"","book_reference":"Core"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]}
{"_id":"L5RCoreIte000033","name":"Journal of observations","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"3","zeni":"1 bu","properties":[],"description":"","book_reference":"Core"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]}

View File

@@ -24,7 +24,7 @@
{"_id":"L5RCoreShu000024","name":"Sear the Wound","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":"Core p.219"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/shuji.svg","effects":[]} {"_id":"L5RCoreShu000024","name":"Sear the Wound","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":"Core p.219"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/shuji.svg","effects":[]}
{"_id":"L5RCoreShu000025","name":"Lightning Raid","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"2","bought_at_rank":0,"ring":"fire","technique_type":"shuji","xp_cost":"3","description":"","book_reference":"Core p.219"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/shuji.svg","effects":[]} {"_id":"L5RCoreShu000025","name":"Lightning Raid","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"2","bought_at_rank":0,"ring":"fire","technique_type":"shuji","xp_cost":"3","description":"","book_reference":"Core p.219"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/shuji.svg","effects":[]}
{"_id":"L5RCoreShu000026","name":"Stirring the Embers","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"1","bought_at_rank":0,"ring":"fire","technique_type":"shuji","xp_cost":"3","description":"","book_reference":"Core p.219"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/shuji.svg","effects":[]} {"_id":"L5RCoreShu000026","name":"Stirring the Embers","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"1","bought_at_rank":0,"ring":"fire","technique_type":"shuji","xp_cost":"3","description":"","book_reference":"Core p.219"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/shuji.svg","effects":[]}
{"_id":"L5RCoreShu000027","name":"Tributaries of Trade","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"2","bought_at_rank":0,"ring":"water","technique_type":"shuji","xp_cost":"3","description":"","book_reference":""},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/shuji.svg","effects":[]} {"_id":"L5RCoreShu000027","name":"Tributaries of Trade","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"2","bought_at_rank":0,"ring":"water","technique_type":"shuji","xp_cost":"3","description":"","book_reference":"Core"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/shuji.svg","effects":[]}
{"_id":"L5RCoreShu000028","name":"All in Jest","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 p.220"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/shuji.svg","effects":[]} {"_id":"L5RCoreShu000028","name":"All in Jest","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 p.220"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/shuji.svg","effects":[]}
{"_id":"L5RCoreShu000029","name":"Buoyant Arrival","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"5","bought_at_rank":0,"ring":"water","technique_type":"shuji","xp_cost":"3","description":"","book_reference":"Core p.220"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/shuji.svg","effects":[]} {"_id":"L5RCoreShu000029","name":"Buoyant Arrival","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"5","bought_at_rank":0,"ring":"water","technique_type":"shuji","xp_cost":"3","description":"","book_reference":"Core p.220"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/shuji.svg","effects":[]}
{"_id":"L5RCoreShu000030","name":"Ebb and Flow","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"3","bought_at_rank":0,"ring":"water","technique_type":"shuji","xp_cost":"3","description":"","book_reference":"Core p.220"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/shuji.svg","effects":[]} {"_id":"L5RCoreShu000030","name":"Ebb and Flow","permission":{"default":0},"type":"technique","data":{"in_curriculum":false,"xp_used":0,"rank":"3","bought_at_rank":0,"ring":"water","technique_type":"shuji","xp_cost":"3","description":"","book_reference":"Core p.220"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/techs/shuji.svg","effects":[]}

View File

@@ -1,38 +1,38 @@
{"_id":"L5RCoreWea000001","name":"Bokken","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"3","zeni":"1 bu","properties":[{"id":"L5RCorePro000012","name":"Mundane"}],"category":"Swords","skill":"melee","readied":false,"range":"1","damage":"3","deadliness":"3","grip_1":"-","grip_2":"Damage +2","description":"","book_reference":"Core p.232"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/katana.svg","effects":[]} {"_id":"L5RCoreWea000001","name":"Bokken","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"3","zeni":"1 bu","properties":[{"id":"L5RCorePro000012","name":"Mundane"}],"category":"Swords","skill":"melee","readied":false,"range":"1","damage":"3","deadliness":"3","grip_1":"-","grip_2":"Damage +2","description":"","book_reference":"Core p.232"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/katana.svg","effects":[]}
{"_id":"L5RCoreWea000002","name":"Chokutō","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"7","zeni":"20 koku","properties":[{"id":"L5RCorePro000002","name":"Ceremonial"},{"id":"L5RCorePro000001","name":" Razor-Edged"}],"category":"Swords","skill":"melee","readied":false,"range":"0-1","damage":"4","deadliness":"5","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.232"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/katana.svg","effects":[]} {"_id":"L5RCoreWea000002","name":"Chokutō","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"7","zeni":"20 koku","properties":[{"id":"L5RCorePro000002","name":"Ceremonial"},{"id":"L5RCorePro000001","name":" Razor-Edged"}],"category":"Swords","skill":"melee","readied":false,"range":"0-1","damage":"4","deadliness":"5","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.232"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/katana.svg","effects":[]}
{"_id":"L5RCoreWea000003","name":"Scimitar","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"8","zeni":"20 koku","properties":[{"id":"L5RCorePro000015","name":"Durable"},{"id":"L5RCorePro000001","name":" Razor-Edged"}],"category":"Swords","skill":"melee","readied":false,"range":"1","damage":"4","deadliness":"5","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.233"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/katana.svg","effects":[]} {"_id":"L5RCoreWea000003","name":"Scimitar","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"8","zeni":"20 koku","properties":[{"id":"L5RCorePro000015","name":"Durable"},{"id":"L5RCorePro000001","name":" Razor-Edged"}],"category":"Swords","skill":"melee","readied":false,"range":"1","damage":"4","deadliness":"5","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.233"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/katana.svg","effects":[]}
{"_id":"L5RCoreWea000004","name":"Dao","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"6","zeni":"15 koku","properties":[],"category":"Swords","skill":"melee","readied":false,"range":"1","damage":"3","deadliness":"5","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.232"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/katana.svg","effects":[]} {"_id":"L5RCoreWea000004","name":"Dao","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"6","zeni":"15 koku","properties":[],"category":"Swords","skill":"melee","readied":false,"range":"1","damage":"3","deadliness":"5","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.232"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/katana.svg","effects":[]}
{"_id":"L5RCoreWea000005","name":"Gao","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"7","zeni":"15 koku","properties":[{"id":"L5RCorePro000007","name":"Snaring"}],"category":"Swords","skill":"melee","readied":false,"range":"1","damage":"4","deadliness":"3","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.232"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/katana.svg","effects":[]} {"_id":"L5RCoreWea000005","name":"Gao","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"7","zeni":"15 koku","properties":[{"id":"L5RCorePro000007","name":"Snaring"}],"category":"Swords","skill":"melee","readied":false,"range":"1","damage":"4","deadliness":"3","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.232"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/katana.svg","effects":[]}
{"_id":"L5RCoreWea000006","name":"Jian","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"7","zeni":"15 koku","properties":[],"category":"Swords","skill":"melee","readied":false,"range":"0-1","damage":"4","deadliness":"4","grip_1":"-","grip_2":"Deadliness +1","description":"","book_reference":"Core p.232"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/katana.svg","effects":[]} {"_id":"L5RCoreWea000006","name":"Jian","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"7","zeni":"15 koku","properties":[],"category":"Swords","skill":"melee","readied":false,"range":"0-1","damage":"4","deadliness":"4","grip_1":"-","grip_2":"Deadliness +1","description":"","book_reference":"Core p.232"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/katana.svg","effects":[]}
{"_id":"L5RCoreWea000007","name":"Katana","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"7","zeni":"20 koku","properties":[{"id":"L5RCorePro000002","name":"Ceremonial"},{"id":"L5RCorePro000001","name":" Razor-Edged"}],"category":"Swords","skill":"melee","readied":false,"range":"1","damage":"4","deadliness":"5","grip_1":"-","grip_2":"Deadliness +2","description":"","book_reference":"Core p.232"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/katana.svg","effects":[]} {"_id":"L5RCoreWea000007","name":"Katana","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"7","zeni":"20 koku","properties":[{"id":"L5RCorePro000002","name":"Ceremonial"},{"id":"L5RCorePro000001","name":" Razor-Edged"}],"category":"Swords","skill":"melee","readied":false,"range":"1","damage":"4","deadliness":"5","grip_1":"-","grip_2":"Deadliness +2","description":"","book_reference":"Core p.232"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/katana.svg","effects":[]}
{"_id":"L5RCoreWea000008","name":"Nodachi","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"8","zeni":"20 koku","properties":[{"id":"L5RCorePro000002","name":"Ceremonial"},{"id":"L5RCorePro000001","name":" Razor-Edged"}],"category":"Swords","skill":"melee","readied":false,"range":"1-2","damage":"5","deadliness":"6","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.232"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/katana.svg","effects":[]} {"_id":"L5RCoreWea000008","name":"Nodachi","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"8","zeni":"20 koku","properties":[{"id":"L5RCorePro000002","name":"Ceremonial"},{"id":"L5RCorePro000001","name":" Razor-Edged"}],"category":"Swords","skill":"melee","readied":false,"range":"1-2","damage":"5","deadliness":"6","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.232"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/katana.svg","effects":[]}
{"_id":"L5RCoreWea000009","name":"Wakizashi","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"7","zeni":"15 koku","properties":[{"id":"L5RCorePro000002","name":"Ceremonial"},{"id":"L5RCorePro000001","name":" Razor-Edged"}],"category":"Swords","skill":"melee","readied":false,"range":"0-1","damage":"3","deadliness":"5","grip_1":"-","grip_2":"Deadliness +2","description":"","book_reference":"Core p.233"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/katana.svg","effects":[]} {"_id":"L5RCoreWea000009","name":"Wakizashi","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"7","zeni":"15 koku","properties":[{"id":"L5RCorePro000002","name":"Ceremonial"},{"id":"L5RCorePro000001","name":" Razor-Edged"}],"category":"Swords","skill":"melee","readied":false,"range":"0-1","damage":"3","deadliness":"5","grip_1":"-","grip_2":"Deadliness +2","description":"","book_reference":"Core p.233"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/katana.svg","effects":[]}
{"_id":"L5RCoreWea000010","name":"Zanbatō","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"8","zeni":"40 koku","properties":[{"id":"L5RCorePro000006","name":"Cumbersome"},{"id":"L5RCorePro000011","name":" Wargear"}],"category":"Swords","skill":"melee","readied":false,"range":"1-2","damage":"6","deadliness":"7","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.233"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/katana.svg","effects":[]} {"_id":"L5RCoreWea000010","name":"Zanbatō","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"2","rarity":"8","zeni":"40 koku","properties":[{"id":"L5RCorePro000006","name":"Cumbersome"},{"id":"L5RCorePro000011","name":" Wargear"}],"category":"Swords","skill":"melee","readied":false,"range":"1-2","damage":"6","deadliness":"7","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.233"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/katana.svg","effects":[]}
{"_id":"L5RCoreWea000011","name":"Masakari","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"5","zeni":"3 bu","properties":[{"id":"L5RCorePro000012","name":"Mundane"}],"category":"Axes","skill":"melee","readied":false,"range":"0-1","damage":"3","deadliness":"4","grip_1":"-","grip_2":"Deadliness +2","description":"","book_reference":"Core p.233"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/axe.svg","effects":[]} {"_id":"L5RCoreWea000011","name":"Masakari","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"5","zeni":"3 bu","properties":[{"id":"L5RCorePro000012","name":"Mundane"}],"category":"Axes","skill":"melee","readied":false,"range":"0-1","damage":"3","deadliness":"4","grip_1":"-","grip_2":"Deadliness +2","description":"","book_reference":"Core p.233"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/axe.svg","effects":[]}
{"_id":"L5RCoreWea000012","name":"Ono","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"7","zeni":"5 koku","properties":[{"id":"L5RCorePro000011","name":"Wargear"}],"category":"Axes","skill":"melee","readied":false,"range":"1-2","damage":"5","deadliness":"6","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.233"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/axe.svg","effects":[]} {"_id":"L5RCoreWea000012","name":"Ono","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"7","zeni":"5 koku","properties":[{"id":"L5RCorePro000011","name":"Wargear"}],"category":"Axes","skill":"melee","readied":false,"range":"1-2","damage":"5","deadliness":"6","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.233"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/axe.svg","effects":[]}
{"_id":"L5RCoreWea000013","name":"Club","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"1","zeni":"1 bu","properties":[{"id":"L5RCorePro000012","name":"Mundane"}],"category":"Blunt Weapons","skill":"melee","readied":false,"range":"0-1","damage":"5","deadliness":"2","grip_1":"-","grip_2":"Damage +1","description":"","book_reference":"Core p.234"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/mace.svg","effects":[]} {"_id":"L5RCoreWea000013","name":"Club","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"1","zeni":"1 bu","properties":[{"id":"L5RCorePro000012","name":"Mundane"}],"category":"Blunt Weapons","skill":"melee","readied":false,"range":"0-1","damage":"5","deadliness":"2","grip_1":"-","grip_2":"Damage +1","description":"","book_reference":"Core p.234"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/mace.svg","effects":[]}
{"_id":"L5RCoreWea000014","name":"Kiseru","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"5","zeni":"1 koku","properties":[{"id":"L5RCorePro000005","name":"Concealable"},{"id":"L5RCorePro000012","name":" Mundane"}],"category":"Blunt Weapons","skill":"melee","readied":false,"range":"","damage":"2","deadliness":"2","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.234"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/mace.svg","effects":[]} {"_id":"L5RCoreWea000014","name":"Kiseru","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"5","zeni":"1 koku","properties":[{"id":"L5RCorePro000005","name":"Concealable"},{"id":"L5RCorePro000012","name":" Mundane"}],"category":"Blunt Weapons","skill":"melee","readied":false,"range":"","damage":"2","deadliness":"2","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.234"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/mace.svg","effects":[]}
{"_id":"L5RCoreWea000015","name":"Hammer","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"4","zeni":"2 bu","properties":[{"id":"L5RCorePro000012","name":"Mundane"}],"category":"Blunt Weapons","skill":"melee","readied":false,"range":"0-1","damage":"5","deadliness":"2","grip_1":"-","grip_2":"Damage +2","description":"","book_reference":"Core p.234"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/mace.svg","effects":[]} {"_id":"L5RCoreWea000015","name":"Hammer","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"4","zeni":"2 bu","properties":[{"id":"L5RCorePro000012","name":"Mundane"}],"category":"Blunt Weapons","skill":"melee","readied":false,"range":"0-1","damage":"5","deadliness":"2","grip_1":"-","grip_2":"Damage +2","description":"","book_reference":"Core p.234"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/mace.svg","effects":[]}
{"_id":"L5RCoreWea000016","name":"Otsuchi","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"8","zeni":"30 koku","properties":[{"id":"L5RCorePro000006","name":"Cumbersome"},{"id":"L5RCorePro000011","name":" Wargear"}],"category":"Blunt Weapons","skill":"melee","readied":false,"range":"1","damage":"8","deadliness":"3","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.234"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/mace.svg","effects":[]} {"_id":"L5RCoreWea000016","name":"Otsuchi","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"2","rarity":"8","zeni":"30 koku","properties":[{"id":"L5RCorePro000006","name":"Cumbersome"},{"id":"L5RCorePro000011","name":" Wargear"}],"category":"Blunt Weapons","skill":"melee","readied":false,"range":"1","damage":"8","deadliness":"3","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.234"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/mace.svg","effects":[]}
{"_id":"L5RCoreWea000017","name":"Tetsubō","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"5","zeni":"20 koku","properties":[{"id":"L5RCorePro000006","name":"Cumbersome"},{"id":"L5RCorePro000015","name":" Durable"},{"id":"L5RCorePro000011","name":" Wargear"}],"category":"Blunt Weapons","skill":"melee","readied":false,"range":"1-2","damage":"7","deadliness":"3","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.234"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/mace.svg","effects":[]} {"_id":"L5RCoreWea000017","name":"Tetsubō","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"2","rarity":"5","zeni":"20 koku","properties":[{"id":"L5RCorePro000006","name":"Cumbersome"},{"id":"L5RCorePro000015","name":" Durable"},{"id":"L5RCorePro000011","name":" Wargear"}],"category":"Blunt Weapons","skill":"melee","readied":false,"range":"1-2","damage":"7","deadliness":"3","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.234"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/mace.svg","effects":[]}
{"_id":"L5RCoreWea000018","name":"Jitte","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"5","zeni":"5 bu","properties":[{"id":"L5RCorePro000007","name":" Snaring"}],"category":"Hand Weapons","skill":"melee","readied":false,"range":"","damage":"3","deadliness":"2","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.234"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/knife.svg","effects":[]} {"_id":"L5RCoreWea000018","name":"Jitte","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"5","zeni":"5 bu","properties":[{"id":"L5RCorePro000007","name":" Snaring"}],"category":"Hand Weapons","skill":"melee","readied":false,"range":"","damage":"3","deadliness":"2","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.234"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/knife.svg","effects":[]}
{"_id":"L5RCoreWea000019","name":"Knife","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"1","zeni":"1 koku","properties":[{"id":"L5RCorePro000001","name":"Razor-Edged"},{"id":"L5RCorePro000005","name":" Concealable"},{"id":"L5RCorePro000012","name":" Mundane"}],"category":"Hand Weapons","skill":"melee","readied":false,"range":"","damage":"2","deadliness":"4","grip_1":"-","grip_2":"Deadliness +2","description":"","book_reference":"Core p.234"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/knife.svg","effects":[]} {"_id":"L5RCoreWea000019","name":"Knife","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"1","zeni":"1 koku","properties":[{"id":"L5RCorePro000001","name":"Razor-Edged"},{"id":"L5RCorePro000005","name":" Concealable"},{"id":"L5RCorePro000012","name":" Mundane"}],"category":"Hand Weapons","skill":"melee","readied":false,"range":"","damage":"2","deadliness":"4","grip_1":"-","grip_2":"Deadliness +2","description":"","book_reference":"Core p.234"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/knife.svg","effects":[]}
{"_id":"L5RCoreWea000020","name":"Nunchaku","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"6","zeni":"1 koku","properties":[],"category":"Hand Weapons","skill":"melee","readied":false,"range":"0-1","damage":"4","deadliness":"2","grip_1":"-","grip_2":"Snaring","description":"","book_reference":"Core p.235"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/nunchaku.svg","effects":[]} {"_id":"L5RCoreWea000020","name":"Nunchaku","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"6","zeni":"1 koku","properties":[],"category":"Hand Weapons","skill":"melee","readied":false,"range":"0-1","damage":"4","deadliness":"2","grip_1":"-","grip_2":"Snaring","description":"","book_reference":"Core p.235"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/nunchaku.svg","effects":[]}
{"_id":"L5RCoreWea000021","name":"Tessen","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"7","zeni":"15 koku","properties":[{"id":"L5RCorePro000002","name":"Ceremonial"},{"id":"L5RCorePro000005","name":" Concealable"}],"category":"Hand Weapons","skill":"melee","readied":false,"range":"0-1","damage":"4","deadliness":"3","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.235"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/knife.svg","effects":[]} {"_id":"L5RCoreWea000021","name":"Tessen","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"7","zeni":"15 koku","properties":[{"id":"L5RCorePro000002","name":"Ceremonial"},{"id":"L5RCorePro000005","name":" Concealable"}],"category":"Hand Weapons","skill":"melee","readied":false,"range":"0-1","damage":"4","deadliness":"3","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.235"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/knife.svg","effects":[]}
{"_id":"L5RCoreWea000022","name":"Bisentō","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"8","zeni":"15 koku","properties":[{"id":"L5RCorePro000006","name":"Cumbersome"},{"id":"L5RCorePro000015","name":" Durable"},{"id":"L5RCorePro000011","name":" Wargear"}],"category":"Polearms","skill":"melee","readied":false,"range":"2","damage":"4","deadliness":"6","grip_1":"Range 1","grip_2":"Damage +2","description":"","book_reference":"Core p.235"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/bo.svg","effects":[]} {"_id":"L5RCoreWea000022","name":"Bisentō","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"2","rarity":"8","zeni":"15 koku","properties":[{"id":"L5RCorePro000006","name":"Cumbersome"},{"id":"L5RCorePro000015","name":" Durable"},{"id":"L5RCorePro000011","name":" Wargear"}],"category":"Polearms","skill":"melee","readied":false,"range":"2","damage":"4","deadliness":"6","grip_1":"Range 1","grip_2":"Damage +2","description":"","book_reference":"Core p.235"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/bo.svg","effects":[]}
{"_id":"L5RCoreWea000023","name":"Bō","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"2","zeni":"2 bu","properties":[{"id":"L5RCorePro000012","name":"Mundane"}],"category":"Polearms","skill":"melee","readied":false,"range":"1-2","damage":"6","deadliness":"2","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.235"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/bo.svg","effects":[]} {"_id":"L5RCoreWea000023","name":"Bō","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"2","zeni":"2 bu","properties":[{"id":"L5RCorePro000012","name":"Mundane"}],"category":"Polearms","skill":"melee","readied":false,"range":"1-2","damage":"6","deadliness":"2","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.235"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/bo.svg","effects":[]}
{"_id":"L5RCoreWea000024","name":"Ji","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"6","zeni":"7 koku","properties":[{"id":"L5RCorePro000007","name":"Snaring"},{"id":"L5RCorePro000011","name":" Wargear"}],"category":"Polearms","skill":"melee","readied":false,"range":"2","damage":"5","deadliness":"2","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.235"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/bo.svg","effects":[]} {"_id":"L5RCoreWea000024","name":"Ji","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"6","zeni":"7 koku","properties":[{"id":"L5RCorePro000007","name":"Snaring"},{"id":"L5RCorePro000011","name":" Wargear"}],"category":"Polearms","skill":"melee","readied":false,"range":"2","damage":"5","deadliness":"2","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.235"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/bo.svg","effects":[]}
{"_id":"L5RCoreWea000025","name":"Naginata","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"8","zeni":"10 koku","properties":[{"id":"L5RCorePro000006","name":"Cumbersome"},{"id":"L5RCorePro000001","name":" Razor-Edged"},{"id":"L5RCorePro000011","name":" Wargear"}],"category":"Polearms","skill":"melee","readied":false,"range":"2","damage":"6","deadliness":"6","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.235"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/bo.svg","effects":[]} {"_id":"L5RCoreWea000025","name":"Naginata","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"2","rarity":"8","zeni":"10 koku","properties":[{"id":"L5RCorePro000006","name":"Cumbersome"},{"id":"L5RCorePro000001","name":" Razor-Edged"},{"id":"L5RCorePro000011","name":" Wargear"}],"category":"Polearms","skill":"melee","readied":false,"range":"2","damage":"6","deadliness":"6","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.235"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/bo.svg","effects":[]}
{"_id":"L5RCoreWea000026","name":"Trident","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"7","zeni":"10 koku","properties":[{"id":"L5RCorePro000007","name":"Snaring"},{"id":"L5RCorePro000011","name":" Wargear"}],"category":"Polearms","skill":"melee","readied":false,"range":"2","damage":"4","deadliness":"4","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.235"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/bo.svg","effects":[]} {"_id":"L5RCoreWea000026","name":"Trident","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"7","zeni":"10 koku","properties":[{"id":"L5RCorePro000007","name":"Snaring"},{"id":"L5RCorePro000011","name":" Wargear"}],"category":"Polearms","skill":"melee","readied":false,"range":"2","damage":"4","deadliness":"4","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.235"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/bo.svg","effects":[]}
{"_id":"L5RCoreWea000027","name":"Yari","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"3","zeni":"5 koku","properties":[{"id":"L5RCorePro000011","name":"Wargear"}],"category":"Polearms","skill":"melee","readied":false,"range":"2","damage":"5","deadliness":"3","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.235"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/bo.svg","effects":[]} {"_id":"L5RCoreWea000027","name":"Yari","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"3","zeni":"5 koku","properties":[{"id":"L5RCorePro000011","name":"Wargear"}],"category":"Polearms","skill":"melee","readied":false,"range":"2","damage":"5","deadliness":"3","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.235"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/bo.svg","effects":[]}
{"_id":"L5RCoreWea000028","name":"Horsebow","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"4","zeni":"6 koku","properties":[{"id":"L5RCorePro000011","name":"Wargear"}],"category":"Bows","skill":"ranged","readied":false,"range":"2-4","damage":"4","deadliness":"5","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.236"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/bow.svg","effects":[]} {"_id":"L5RCoreWea000028","name":"Horsebow","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"4","zeni":"6 koku","properties":[{"id":"L5RCorePro000011","name":"Wargear"}],"category":"Bows","skill":"ranged","readied":false,"range":"2-4","damage":"4","deadliness":"5","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.236"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/bow.svg","effects":[]}
{"_id":"L5RCoreWea000029","name":"Daikyū","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"6","zeni":"6 koku","properties":[{"id":"L5RCorePro000011","name":"Wargear"}],"category":"Bows","skill":"ranged","readied":false,"range":"3-5","damage":"6","deadliness":"4","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.236"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/bow.svg","effects":[]} {"_id":"L5RCoreWea000029","name":"Daikyū","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"6","zeni":"6 koku","properties":[{"id":"L5RCorePro000011","name":"Wargear"}],"category":"Bows","skill":"ranged","readied":false,"range":"3-5","damage":"6","deadliness":"4","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.236"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/bow.svg","effects":[]}
{"_id":"L5RCoreWea000030","name":"Yumi","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"3","zeni":"3 koku","properties":[],"category":"Bows","skill":"ranged","readied":false,"range":"2-5","damage":"5","deadliness":"3","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.236"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/bow.svg","effects":[]} {"_id":"L5RCoreWea000030","name":"Yumi","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"3","zeni":"3 koku","properties":[],"category":"Bows","skill":"ranged","readied":false,"range":"2-5","damage":"5","deadliness":"3","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.236"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/bow.svg","effects":[]}
{"_id":"L5RCoreWea000031","name":"Oyumi","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"8","zeni":"40 koku","properties":[{"id":"L5RCorePro000013","name":"Prepare"},{"id":"L5RCorePro000011","name":" Wargear"}],"category":"Crossbows","skill":"ranged","readied":false,"range":"2-5","damage":"7","deadliness":"3","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.236"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/bow.svg","effects":[]} {"_id":"L5RCoreWea000031","name":"Oyumi","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"8","zeni":"40 koku","properties":[{"id":"L5RCorePro000013","name":"Prepare"},{"id":"L5RCorePro000011","name":" Wargear"}],"category":"Crossbows","skill":"ranged","readied":false,"range":"2-5","damage":"7","deadliness":"3","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.236"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/bow.svg","effects":[]}
{"_id":"L5RCoreWea000032","name":"Kama","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"4","zeni":"1 koku","properties":[{"id":"L5RCorePro000005","name":"Concealable"}],"category":"Specialist Weapons","skill":"melee","readied":false,"range":"0-1","damage":"3","deadliness":"3","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.237"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/kusarigama.svg","effects":[]} {"_id":"L5RCoreWea000032","name":"Kama","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"4","zeni":"1 koku","properties":[{"id":"L5RCorePro000005","name":"Concealable"}],"category":"Specialist Weapons","skill":"melee","readied":false,"range":"0-1","damage":"3","deadliness":"3","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.237"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/kusarigama.svg","effects":[]}
{"_id":"L5RCoreWea000033","name":"Kusari-gama","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"6","zeni":"5 koku","properties":[{"id":"L5RCorePro000005","name":"Concealable"},{"id":"L5RCorePro000007","name":" Snaring"},{"id":"L5RCorePro000011","name":" Wargear"}],"category":"Specialist Weapons","skill":"melee","readied":false,"range":"","damage":"3","deadliness":"3","grip_1":"-","grip_2":"Range 2-3","description":"","book_reference":"Core p.237"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/kusarigama.svg","effects":[]} {"_id":"L5RCoreWea000033","name":"Kusari-gama","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"6","zeni":"5 koku","properties":[{"id":"L5RCorePro000005","name":"Concealable"},{"id":"L5RCorePro000007","name":" Snaring"},{"id":"L5RCorePro000011","name":" Wargear"}],"category":"Specialist Weapons","skill":"melee","readied":false,"range":"","damage":"3","deadliness":"3","grip_1":"-","grip_2":"Range 2-3","description":"","book_reference":"Core p.237"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/kusarigama.svg","effects":[]}
{"_id":"L5RCoreWea000034","name":"Blowgun","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"1","zeni":"5 bu","properties":[{"id":"L5RCorePro000005","name":"Concealable"}],"category":"Specialist Weapons","skill":"ranged","readied":false,"range":"2-3","damage":"1","deadliness":"2","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.237"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/kusarigama.svg","effects":[]} {"_id":"L5RCoreWea000034","name":"Blowgun","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"1","rarity":"1","zeni":"5 bu","properties":[{"id":"L5RCorePro000005","name":"Concealable"}],"category":"Specialist Weapons","skill":"ranged","readied":false,"range":"2-3","damage":"1","deadliness":"2","grip_1":"-","grip_2":"-","description":"","book_reference":"Core p.237"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/kusarigama.svg","effects":[]}
{"_id":"L5RCoreWea000035","name":"Shuriken","permission":{"default":0},"type":"weapon","data":{"equipped":false,"quantity":1,"weight":"0","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 p.237"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/kusarigama.svg","effects":[]} {"_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 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 p.237"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/unarmed.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 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 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 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 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 p.237"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/weapons/unarmed.svg","effects":[]}

View File

@@ -76,22 +76,22 @@ export class ActorL5r5e extends Actor {
if (["character", "npc"].includes(this.data.type)) { if (["character", "npc"].includes(this.data.type)) {
const data = this.data.data; const data = this.data.data;
data.endurance = (Number(data.rings.earth) + Number(data.rings.fire)) * 2; // No automation for npc as they cheat in stats
data.composure = (Number(data.rings.earth) + Number(data.rings.water)) * 2; if (this.data.type === "character") {
data.focus = Number(data.rings.air) + Number(data.rings.fire); data.endurance = (Number(data.rings.earth) + Number(data.rings.fire)) * 2;
data.composure = (Number(data.rings.earth) + Number(data.rings.water)) * 2;
// Attributes bars data.focus = Number(data.rings.air) + Number(data.rings.fire);
data.void_points.max = data.rings.void;
data.fatigue.max = data.endurance;
data.strife.max = data.composure;
// if compromise, vigilance = 1
if (data.strife.value > data.strife.max) {
data.vigilance = 1;
} else {
data.vigilance = Math.ceil((Number(data.rings.air) + Number(data.rings.water)) / 2); data.vigilance = Math.ceil((Number(data.rings.air) + Number(data.rings.water)) / 2);
} }
// Attributes bars
data.fatigue.max = data.endurance;
data.strife.max = data.composure;
data.void_points.max = data.rings.void;
// if compromise, vigilance = 1
data.is_compromised = data.strife.value > data.strife.max;
// Make sure void points are never greater than max // Make sure void points are never greater than max
if (data.void_points.value > data.void_points.max) { if (data.void_points.value > data.void_points.max) {
data.void_points.value = data.void_points.max; data.void_points.value = data.void_points.max;

View File

@@ -159,7 +159,7 @@ export class BaseSheetL5r5e extends ActorSheet {
event.stopPropagation(); event.stopPropagation();
const elmt = $(event.currentTarget).data("toggle"); const elmt = $(event.currentTarget).data("toggle");
const tgt = html.find("." + elmt); const tgt = html.find("." + elmt);
tgt.hasClass("toggle-active") ? tgt.removeClass("toggle-active") : tgt.addClass("toggle-active"); tgt.toggleClass("toggle-active");
}); });
// *** Everything below here is only needed if the sheet is editable *** // *** Everything below here is only needed if the sheet is editable ***
@@ -175,7 +175,7 @@ export class BaseSheetL5r5e extends ActorSheet {
new game.l5r5e.DicePickerDialog({ new game.l5r5e.DicePickerDialog({
skillId: li.data("skill") || null, skillId: li.data("skill") || null,
skillCatId: li.data("skillcat") || null, skillCatId: li.data("skillcat") || null,
difficulty: li.data("diff") || 2, isInitiativeRoll: li.data("initiative") || false,
actor: this.actor, actor: this.actor,
}).render(true); }).render(true);
}); });
@@ -187,6 +187,23 @@ export class BaseSheetL5r5e extends ActorSheet {
event.target.select(); event.target.select();
}); });
// Prepared (Initiative)
html.find(".prepared-control").on("click", (event) => {
event.preventDefault();
event.stopPropagation();
const preparedId = $(event.currentTarget).data("id");
if (["adversary", "character"].includes(preparedId)) {
this._switchPrepared();
}
});
// Equipped / Readied
html.find(".equip-readied-control").on("click", (event) => {
event.preventDefault();
event.stopPropagation();
this._switchEquipReadied(event);
});
// *** Items : add, edit, delete *** // *** Items : add, edit, delete ***
html.find(".item-add").on("click", (event) => { html.find(".item-add").on("click", (event) => {
event.preventDefault(); event.preventDefault();
@@ -205,6 +222,20 @@ export class BaseSheetL5r5e extends ActorSheet {
}); });
} }
/**
* Switch the state "prepared" (initiative)
* @private
*/
_switchPrepared() {
this.actor.data.data.prepared = !this.actor.data.data.prepared;
this.actor.update({
data: {
prepared: this.actor.data.data.prepared,
},
});
this.render(false);
}
/** /**
* Add a generic item with sub type * Add a generic item with sub type
* @private * @private
@@ -315,4 +346,32 @@ export class BaseSheetL5r5e extends ActorSheet {
} }
return false; return false;
} }
/**
* Switch Readied state on a weapon
* @private
*/
_switchEquipReadied(event) {
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);
if (!tmpItem || tmpItem.data.data[type] === undefined) {
return;
}
tmpItem.data.data[type] = !tmpItem.data.data[type];
const data = {
equipped: tmpItem.data.data.equipped,
};
// Only weapons
if (tmpItem.data.data.readied !== undefined) {
data.readied = tmpItem.data.data.readied;
}
tmpItem.update({ data });
}
} }

View File

@@ -116,7 +116,7 @@ export class CharacterSheetL5r5e extends BaseSheetL5r5e {
// if not in curriculum, xp spent /2 for this item // if not in curriculum, xp spent /2 for this item
if (!item.data.in_curriculum && xp > 0) { if (!item.data.in_curriculum && xp > 0) {
xp = Math.floor(xp / 2); xp = Math.ceil(xp / 2);
} }
const rank = Math.max(0, item.data.bought_at_rank); const rank = Math.max(0, item.data.bought_at_rank);

View File

@@ -21,7 +21,7 @@ export class NpcSheetL5r5e extends BaseSheetL5r5e {
sheetData.data.types = NpcSheetL5r5e.types.map((e) => ({ sheetData.data.types = NpcSheetL5r5e.types.map((e) => ({
id: e, id: e,
label: game.i18n.localize("l5r5e.npc.types." + e), label: game.i18n.localize("l5r5e.character_types." + e),
})); }));
return sheetData; return sheetData;

View File

@@ -165,7 +165,7 @@ export class TwentyQuestionsDialog extends FormApplication {
event.stopPropagation(); event.stopPropagation();
const elmt = $(event.currentTarget).data("toggle"); const elmt = $(event.currentTarget).data("toggle");
const tgt = html.find("." + elmt); const tgt = html.find("." + elmt);
tgt.hasClass("toggle-active") ? tgt.removeClass("toggle-active") : tgt.addClass("toggle-active"); tgt.toggleClass("toggle-active");
}); });
// BT Next // BT Next

View File

@@ -184,7 +184,7 @@ export class TwentyQuestions {
const actorDatas = actor.data.data; const actorDatas = actor.data.data;
// already 20q struct ? // already 20q struct ?
if (actorDatas.twenty_questions?.step1?.clan) { if (!isObjectEmpty(actorDatas.twenty_questions)) {
this.data = { this.data = {
...this.data, ...this.data,
...actorDatas.twenty_questions, ...actorDatas.twenty_questions,
@@ -216,6 +216,8 @@ export class TwentyQuestions {
const actorDatas = actor.data.data; const actorDatas = actor.data.data;
const formData = this.data; const formData = this.data;
this.data.generated = true;
const status = parseInt(formData.step1.social_status) + parseInt(formData.step18.heritage_add_status); const status = parseInt(formData.step1.social_status) + parseInt(formData.step18.heritage_add_status);
const glory = const glory =

View File

@@ -1,61 +1,138 @@
/** /**
* Roll initiative for one or multiple Combatants within the Combat entity * Extends the actor to process special things from L5R.
* @param {string|string[]} ids A Combatant id or Array of ids for which to roll
* @param {string|null} [formula] A non-default initiative formula to roll. Otherwise the system default is used.
* @param {boolean} [updateTurn] Update the Combat turn after adding new initiative scores to keep the turn on
* the same Combatant.
* @param {object} [messageOptions] Additional options with which to customize created Chat Messages
* @return {Promise<Combat>} A promise which resolves to the updated Combat entity once updates are complete.
*/ */
export async function rollInitiative(ids, { formula = null, updateTurn = true, messageOptions = {} } = {}) { export class CombatL5r5e extends Combat {
if (!Array.isArray(ids)) { // game.combat.settings.resource = "fatigue.value"; // nope :/
ids = [ids]; // constructor(...args) {
} // super(...args);
const updatedCombatants = []; // console.log(args);
ids.forEach((combatantId) => { // }
const combatant = game.combat.combatants.find((c) => c._id === combatantId);
if (!combatant || !combatant.actor) { /**
return; * Roll initiative for one or multiple Combatants within the Combat entity
} * @param {string|string[]} ids A Combatant id or Array of ids for which to roll
const data = combatant.actor.data.data; * @param {string|null} [formula] A non-default initiative formula to roll. Otherwise the system default is used.
const formula = [`${data.rings[data.stance]}dr`]; * @param {boolean} [updateTurn] Update the Combat turn after adding new initiative scores to keep the turn on
const skillValue = * the same Combatant.
combatant.actor.data.type === "npc" ? data.skills["martial"] : data.skills["martial"]["tactics"]; * @param {object} [messageOptions] Additional options with which to customize created Chat Messages
if (skillValue > 0) { * @return {Promise<Combat>} A promise which resolves to the updated Combat entity once updates are complete.
formula.push(`${skillValue}ds`); */
async rollInitiative(ids, { formula = null, updateTurn = true, messageOptions = {} } = {}) {
if (!Array.isArray(ids)) {
ids = [ids];
} }
const roll = new game.l5r5e.RollL5r5e(formula.join("+")); // Get global modifiers
const cfg = {
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"),
},
};
roll.actor = combatant.actor; // SkillId from DicePicker or global
roll.l5r5e.stance = data.stance; const skillId = messageOptions.skillId
roll.l5r5e.skillId = "tactics"; ? messageOptions.skillId
roll.l5r5e.summary.difficulty = 1; : CONFIG.l5r5e.initiativeSkills[game.settings.get("l5r5e", "initiative.encounter")];
const skillCat = CONFIG.l5r5e.skills.get(skillId);
roll.roll(); // Get score for each combatant
roll.toMessage({ flavor: game.i18n.localize("l5r5e.chatdices.initiative_roll") }); const updatedCombatants = [];
ids.forEach((combatantId) => {
const combatant = game.combat.combatants.find((c) => c._id === combatantId);
updatedCombatants.push({ // Skip if combatant already have a initiative value
_id: combatant._id, if (!messageOptions.rerollInitiative && (!combatant || !combatant.actor)) {
initiative: roll.l5r5e.summary.success, return;
}
// Shortcut to data
const data = combatant.actor.data.data;
// A characters initiative value is based on their state of preparedness when the conflict began.
// If the character was ready for the conflict, their base initiative value is their focus attribute.
// If the character was unprepared (such as when surprised), their base initiative value is their vigilance attribute.
let initiative;
if (combatant.actor.data.type === "npc" && combatant.actor.data.data.type === "minion") {
// Minion NPCs can generate initiative value without a check, using their focus or vigilance attribute
initiative = cfg.prepared.minion === "true" ? data.focus : data.is_compromised ? 1 : data.vigilance;
} else {
// PC and Adversary
const isPc = combatant.actor.data.type === "character";
// prepared is a boolean or if null we get the info in the actor sheet
let isPrepared = isPc ? cfg.prepared.character : cfg.prepared.adversary;
if (isPrepared === "null") {
isPrepared = data.prepared ? "true" : "false";
}
initiative = isPrepared === "true" ? data.focus : data.is_compromised ? 1 : data.vigilance;
// Roll formula
if (!formula) {
const createFormula = [`${data.rings[data.stance]}dr`];
const skillValue = isPc ? data.skills[skillCat][skillId] : data.skills[skillCat];
if (skillValue > 0) {
createFormula.push(`${skillValue}ds`);
}
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;
roll.roll();
roll.toMessage({
flavor:
game.i18n.localize("l5r5e.chatdices.initiative_roll") +
" (" +
game.i18n.localize(`l5r5e.conflict.initiative.prepared_${isPrepared}`) +
")",
});
// 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);
}
}
updatedCombatants.push({
_id: combatant._id,
initiative: initiative,
});
}); });
});
// Update all combatants at once // Update all combatants at once
await this.updateEmbeddedEntity("Combatant", updatedCombatants); await this.updateEmbeddedEntity("Combatant", updatedCombatants);
return this; return this;
} }
/** /**
* Define how the array of Combatants is sorted in the displayed list of the tracker. * Define how the array of Combatants is sorted in the displayed list of the tracker.
* This method can be overridden by a system or module which needs to display combatants in an alternative order. * This method can be overridden by a system or module which needs to display combatants in an alternative order.
* By default sort by initiative, falling back to name * By default sort by initiative, falling back to name
* @private * @private
*/ */
export function _sortCombatants(a, b) { _sortCombatants(a, b) {
// if tie, sort by honor, less honorable first // if tie, sort by honor, less honorable first
if (a.initiative === b.initiative) { if (a.initiative === b.initiative) {
return a.actor.data.data.social.honor - b.actor.data.data.social.honor; return a.actor.data.data.social.honor - b.actor.data.data.social.honor;
}
return b.initiative - a.initiative;
} }
return b.initiative - a.initiative;
} }

View File

@@ -5,16 +5,24 @@ L5R5E.paths = {
templates: `systems/l5r5e/templates/`, templates: `systems/l5r5e/templates/`,
}; };
L5R5E.money = [50, 10];
L5R5E.stances = ["earth", "air", "water", "fire", "void"]; L5R5E.stances = ["earth", "air", "water", "fire", "void"];
L5R5E.techniques = ["kata", "kiho", "invocation", "ritual", "shuji", "maho", "ninjutsu"]; L5R5E.techniques = ["kata", "kiho", "invocation", "ritual", "shuji", "maho", "ninjutsu"];
L5R5E.techniques_school = ["school_ability", "mastery_ability"]; L5R5E.techniques_school = ["school_ability", "mastery_ability"];
L5R5E.xp = { L5R5E.xp = {
costPerRank: [0, 20, 24, 32, 44, 60], costPerRank: [0, 20, 24, 32, 44, 60],
ringCostMultiplier: 3, ringCostMultiplier: 3,
skillCostMultiplier: 2, skillCostMultiplier: 2,
techniqueCost: 3, techniqueCost: 3,
}; };
L5R5E.money = [50, 10];
L5R5E.initiativeSkills = {
intrigue: "sentiment",
duel: "meditation",
skirmish: "tactics",
mass_battle: "command",
};
// Map SkillId - CategoryId // Map SkillId - CategoryId
L5R5E.skills = new Map(); L5R5E.skills = new Map();

View File

@@ -5,9 +5,17 @@
export class DicePickerDialog extends FormApplication { export class DicePickerDialog extends FormApplication {
/** /**
* Current Actor * Current Actor
* @type {Actor}
* @private
*/ */
_actor = null; _actor = null;
/**
* If GM as set to hidden, lock the player choice so he cannot look the TN
* @type {boolean}
*/
_difficultyHiddenIsLock = false;
/** /**
* Payload Object * Payload Object
*/ */
@@ -26,9 +34,10 @@ export class DicePickerDialog extends FormApplication {
difficulty: { difficulty: {
value: 2, value: 2,
hidden: false, hidden: false,
add_void_point: true, add_void_point: false,
}, },
useVoidPoint: false, useVoidPoint: false,
isInitiativeRoll: false,
}; };
/** /**
@@ -84,8 +93,9 @@ export class DicePickerDialog extends FormApplication {
* skillCatId string (artisan) * skillCatId string (artisan)
* difficulty number (0-9) * difficulty number (0-9)
* difficultyHidden boolean * difficultyHidden boolean
* isInitiativeRoll boolean
* *
* @param options actor, actorId, ringId, actorName, skillId, skillCatId, difficulty, difficultyHidden * @param options actor, actorId, ringId, actorName, skillId, skillCatId, difficulty, difficultyHidden, isInitiativeRoll
*/ */
constructor(options = {}) { constructor(options = {}) {
super({}, options); super({}, options);
@@ -104,29 +114,41 @@ export class DicePickerDialog extends FormApplication {
}); });
// Ring // Ring
if (options?.ringId) { if (options.ringId) {
this.ringId = options.ringId; this.ringId = options.ringId;
} }
// Skill / SkillCategory // Skill / SkillCategory
if (options?.skillId) { if (options.skillId) {
this.skillId = options.skillId; this.skillId = options.skillId;
} }
// SkillCategory skillCatId // SkillCategory skillCatId
if (options?.skillCatId) { if (options.skillCatId) {
this.skillCatId = options.skillCatId; this.skillCatId = options.skillCatId;
} }
// Difficulty // Difficulty
if (options?.difficulty) { if (options.difficulty) {
this.difficulty = options.difficulty; this.difficulty = options.difficulty;
} else {
this.difficulty = game.settings.get("l5r5e", "initiative.difficulty.value");
} }
// difficultyHidden // DifficultyHidden
if (options?.difficultyHidden) { this.difficultyHidden = !!options.difficultyHidden;
this.difficultyHidden = options.difficultyHidden;
} // InitiativeRoll
this.object.isInitiativeRoll = !!options.isInitiativeRoll;
}
/**
* Refresh data (used from socket)
*/
async refresh() {
this.difficulty = game.settings.get("l5r5e", "initiative.difficulty.value");
this.difficultyHidden = false;
this.render(false);
} }
/** /**
@@ -221,7 +243,14 @@ export class DicePickerDialog extends FormApplication {
* @param isHidden * @param isHidden
*/ */
set difficultyHidden(isHidden) { set difficultyHidden(isHidden) {
// If GM hide, then player choice don't matter
this._difficultyHiddenIsLock = game.settings.get("l5r5e", "initiative.difficulty.hidden");
if (this._difficultyHiddenIsLock) {
isHidden = true;
}
this.object.difficulty.hidden = !!isHidden; this.object.difficulty.hidden = !!isHidden;
this.object.difficulty.add_void_point = this.object.difficulty.hidden;
this._updateVoidPointUsage();
} }
/** /**
@@ -247,6 +276,7 @@ export class DicePickerDialog extends FormApplication {
canUseVoidPoint: canUseVoidPoint:
this.object.difficulty.add_void_point || !this._actor || this._actor.data.data.void_points.value > 0, this.object.difficulty.add_void_point || !this._actor || this._actor.data.data.void_points.value > 0,
disableSubmit: this.object.skill.value < 1 && this.object.ring.value < 1, disableSubmit: this.object.skill.value < 1 && this.object.ring.value < 1,
difficultyHiddenIsLock: this._difficultyHiddenIsLock,
}; };
} }
@@ -342,20 +372,23 @@ export class DicePickerDialog extends FormApplication {
return false; return false;
} }
let formula = []; // If initiative roll, check if player already have
if (this.object.ring.value > 0) { if (this.object.isInitiativeRoll) {
formula.push(`${this.object.ring.value}dr`); const combatant = game.combat.combatants.find((c) => c.actor._id === this._actor._id && c.initiative > 0);
} if (combatant) {
if (this.object.skill.value > 0) { ui.notifications.error(game.i18n.localize("l5r5e.conflict.initiative.already_set"));
formula.push(`${this.object.skill.value}ds`); return this.close();
}
} }
// Update Actor // Update Actor
if (this._actor) { if (this._actor) {
const actorData = duplicate(this._actor.data.data); const actorData = duplicate(this._actor.data.data);
// TODO update actor stance ? good idea or not, choice-able ? // Update the actor stance on initiative only
// actorData.stance = approach; if (this.object.isInitiativeRoll) {
actorData.stance = this.object.ring.id;
}
// If hidden add 1 void pt // If hidden add 1 void pt
if (this.object.difficulty.add_void_point) { if (this.object.difficulty.add_void_point) {
@@ -368,24 +401,50 @@ export class DicePickerDialog extends FormApplication {
} }
// Update actor // Update actor
this._actor.update({ await this._actor.update({
data: diffObject(this._actor.data.data, actorData), data: diffObject(this._actor.data.data, actorData),
}); });
} }
// Let's roll ! // Build the formula
const roll = await new game.l5r5e.RollL5r5e(formula.join("+")); let formula = [];
if (this.object.ring.value > 0) {
formula.push(`${this.object.ring.value}dr`);
}
if (this.object.skill.value > 0) {
formula.push(`${this.object.skill.value}ds`);
}
roll.actor = this._actor; if (this.object.isInitiativeRoll) {
roll.l5r5e.stance = this.object.ring.id; // Initiative roll
roll.l5r5e.skillId = this.object.skill.id; this._actor.rollInitiative({
roll.l5r5e.skillCatId = this.object.skill.cat; initiativeOptions: {
roll.l5r5e.summary.difficulty = this.object.difficulty.value; formula: formula.join("+"),
roll.l5r5e.summary.difficultyHidden = this.object.difficulty.hidden; // updateTurn: true,
roll.l5r5e.summary.voidPointUsed = this.object.useVoidPoint; messageOptions: {
skillId: this.object.skill.id,
difficulty: this.object.difficulty.value,
difficultyHidden: this.object.difficulty.hidden,
useVoidPoint: this.object.useVoidPoint,
},
},
});
} else {
// Regular roll, so let's roll !
const roll = await new game.l5r5e.RollL5r5e(formula.join("+"));
roll.actor = this._actor;
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;
await roll.roll();
await roll.toMessage();
}
await roll.roll();
await roll.toMessage();
return this.close(); return this.close();
} }

View File

@@ -0,0 +1,154 @@
/**
* L5R Initiative Roll dialog
* @extends {FormApplication}
*/
export class GmToolsDialog extends FormApplication {
/**
* Settings
*/
object = {};
/**
* Assign the default options
* @override
*/
static get defaultOptions() {
const x = $(window).width();
const y = $(window).height();
return 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,
closeOnSubmit: false,
submitOnClose: false,
submitOnChange: true,
});
}
/**
* Constructor
* @param {ApplicationOptions} options
*/
constructor(options = {}) {
super(options);
this.object = {
difficulty: game.settings.get("l5r5e", "initiative.difficulty.value"),
difficultyHidden: game.settings.get("l5r5e", "initiative.difficulty.hidden"),
};
}
/**
* Do not close this dialog
* @override
*/
close() {
// 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
// Case 3 (GM) - release controlled objects
if (canvas?.ready && game.user.isGM && Object.keys(canvas.activeLayer._controlled).length) {
canvas.activeLayer.releaseAll();
} else {
// Case 4 - toggle the main menu
ui.menu.toggle();
}
}
/**
* Prevent non GM to render this windows
* @override
*/
render(force = false, options = {}) {
if (!game.user.isGM) {
return false;
}
return super.render(force, options);
}
/**
* Remove the close button
* @override
*/
_getHeaderButtons() {
return [];
}
/**
* Construct and return the data object used to render the HTML template for this form application.
* @param options
* @return {Object}
* @override
*/
getData(options = null) {
return {
...super.getData(options),
data: this.object,
};
}
/**
* Listen to html elements
* @override
*/
activateListeners(html) {
super.activateListeners(html);
if (!game.user.isGM) {
return;
}
// Modify difficulty hidden
html.find(`.difficulty_hidden`).on("click", (event) => {
this.object.difficultyHidden = !this.object.difficultyHidden;
game.settings
.set("l5r5e", "initiative.difficulty.hidden", this.object.difficultyHidden)
.then(() => this.submit());
});
// Modify difficulty (TN)
html.find(`.difficulty`).on("mousedown", (event) => {
event.preventDefault();
event.stopPropagation();
switch (event.which) {
case 1:
// left clic - add 1
this.object.difficulty = Math.min(9, this.object.difficulty + 1);
break;
case 2:
// middle clic - reset to 2
this.object.difficulty = 2;
break;
case 3:
// right clic - minus 1
this.object.difficulty = Math.max(0, this.object.difficulty - 1);
break;
}
game.settings.set("l5r5e", "initiative.difficulty.value", this.object.difficulty).then(() => this.submit());
});
}
/**
* This method is called upon form submission after form data is validated
* @param event The initial triggering submission event
* @param formData The object of validated form data with which to update the object
* @returns A Promise which resolves once the update operation has completed
* @override
*/
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);
}
}

View File

@@ -1,6 +1,3 @@
import { L5rBaseDie } from "./dietype/l5r-base-die.js";
import { ActorL5r5e } from "../actor.js";
/** /**
* Roll for L5R5e * Roll for L5R5e
*/ */
@@ -24,6 +21,7 @@ export class RollL5r5e extends Roll {
difficulty: 2, difficulty: 2,
difficultyHidden: false, difficultyHidden: false,
voidPointUsed: false, voidPointUsed: false,
ringsUsed: 0,
success: 0, success: 0,
explosive: 0, explosive: 0,
opportunity: 0, opportunity: 0,
@@ -79,8 +77,14 @@ export class RollL5r5e extends Roll {
// Store final outputs // Store final outputs
this._rolled = true; this._rolled = true;
this.l5r5e.dicesTypes.std = this.dice.some((term) => term instanceof DiceTerm && !(term instanceof L5rBaseDie)); // ignore math symbols this.l5r5e.dicesTypes.std = this.dice.some(
this.l5r5e.dicesTypes.l5r = this.dice.some((term) => term instanceof L5rBaseDie); (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
);
return this; return this;
} }
@@ -92,7 +96,7 @@ export class RollL5r5e extends Roll {
* @private * @private
*/ */
_l5rSummary(term) { _l5rSummary(term) {
if (!(term instanceof L5rBaseDie)) { if (!(term instanceof game.l5r5e.L5rBaseDie)) {
return; return;
} }
@@ -140,7 +144,7 @@ export class RollL5r5e extends Roll {
getTooltip(contexte = null) { getTooltip(contexte = null) {
const parts = this.dice.map((term) => { const parts = this.dice.map((term) => {
const cls = term.constructor; const cls = term.constructor;
const isL5rDie = term instanceof L5rBaseDie; const isL5rDie = term instanceof game.l5r5e.L5rBaseDie;
return { return {
formula: term.formula, formula: term.formula,
@@ -223,7 +227,7 @@ export class RollL5r5e extends Roll {
canRnK: canRnK, canRnK: canRnK,
dices: this.dice.map((d) => { dices: this.dice.map((d) => {
return { return {
diceTypeL5r: d instanceof L5rBaseDie, diceTypeL5r: d instanceof game.l5r5e.L5rBaseDie,
rolls: d.results.map((r) => { rolls: d.results.map((r) => {
return { return {
result: d.constructor.getResultLabel(r.result), result: d.constructor.getResultLabel(r.result),
@@ -290,7 +294,7 @@ export class RollL5r5e extends Roll {
roll.l5r5e = duplicate(data.l5r5e); roll.l5r5e = duplicate(data.l5r5e);
// get real Actor object // get real Actor object
if (data.l5r5e.actor && !(data.l5r5e.actor instanceof ActorL5r5e)) { if (data.l5r5e.actor && !(data.l5r5e.actor instanceof game.l5r5e.ActorL5r5e)) {
const actor = game.actors.get(data.l5r5e.actor.id); const actor = game.actors.get(data.l5r5e.actor.id);
if (actor) { if (actor) {
roll.l5r5e.actor = actor; roll.l5r5e.actor = actor;

View File

@@ -0,0 +1,99 @@
/**
* Custom Handlebars for L5R5e
*/
export const RegisterHandlebars = function () {
/* ------------------------------------ */
/* Localizations */
/* ------------------------------------ */
Handlebars.registerHelper("localizeSkill", function (categoryId, skillId) {
const key = "l5r5e.skills." + categoryId.toLowerCase() + "." + skillId.toLowerCase();
return game.i18n.localize(key);
});
Handlebars.registerHelper("localizeSkillId", function (skillId) {
const key = "l5r5e.skills." + CONFIG.l5r5e.skills.get(skillId.toLowerCase()) + "." + skillId.toLowerCase();
return game.i18n.localize(key);
});
Handlebars.registerHelper("localizeRing", function (ringId) {
const key = "l5r5e.rings." + ringId.toLowerCase();
return game.i18n.localize(key);
});
Handlebars.registerHelper("localizeStanceTip", function (ringId) {
const key = "l5r5e.conflict.stances." + ringId.toLowerCase() + "tip";
return game.i18n.localize(key);
});
Handlebars.registerHelper("localizeTechnique", function (techniqueName) {
return game.i18n.localize("l5r5e.techniques." + techniqueName.toLowerCase());
});
/* ------------------------------------ */
/* Utility */
/* ------------------------------------ */
/**
* Json - Display a object in textarea (for debug)
*/
Handlebars.registerHelper("json", function (...objects) {
objects.pop(); // remove this function call
return new Handlebars.SafeString(objects.map((e) => `<textarea>${JSON.stringify(e)}</textarea>`));
});
/**
* Add props "checked" if a and b are equal ({{radioChecked a b}}
*/
Handlebars.registerHelper("radioChecked", function (a, b) {
return a === b ? new Handlebars.SafeString('checked="checked"') : "";
});
/**
* Utility conditional, usable in nested expression
* {{#ifCond (ifCond advancement.type '==' 'technique') '||' (ifCond item.data.technique_type '==' 'kata')}}
* {{#ifCond '["distinction","passion"]' 'includes' item.data.peculiarity_type}}
*/
Handlebars.registerHelper("ifCond", function (a, operator, b, options) {
let result = false;
switch (operator) {
case "==":
result = a == b;
break;
case "===":
result = a === b;
break;
case "!=":
result = a != b;
break;
case "!==":
result = a !== b;
break;
case "<":
result = a < b;
break;
case "<=":
result = a <= b;
break;
case ">":
result = a > b;
break;
case ">=":
result = a >= b;
break;
case "&&":
result = a && b;
break;
case "||":
result = a || b;
break;
case "includes":
result = a && b && a.includes(b);
break;
default:
break;
}
if (typeof options.fn === "function") {
return result ? options.fn(this) : options.inverse(this);
}
return result;
});
};

217
system/scripts/hooks.js Normal file
View File

@@ -0,0 +1,217 @@
/* eslint-disable no-undef */
export default class HooksL5r5e {
/**
* Do anything after initialization but before ready
*/
static setup() {
// Embed Babele compendiums
if (
typeof Babele !== "undefined" &&
Babele.get().modules.every((module) => module.lang !== "fr" || module.module !== "l5r5e-dev")
) {
Babele.get().register({
module: "../systems/l5r5e", // babele only accept modules, so... well :D
lang: "fr",
dir: "babele/fr-fr",
});
}
}
/**
* Do anything once the system is ready
*/
static ready() {
// Migration stuff
if (game.l5r5e.migrations.needUpdate()) {
game.l5r5e.migrations.migrateWorld();
}
// Settings TN and EncounterType
if (game.user.isGM) {
new game.l5r5e.GmToolsDialog().render(true);
}
// ***** UI *****
// Add title on button dice icon
$(".chat-control-icon")[0].title = game.i18n.localize("l5r5e.chatdices.dicepicker");
// Open Help dialog on clic on logo
$("#logo")
.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"));
}
}
/**
* SidebarTab
*/
static renderSidebarTab(app, html, data) {
// Add button on dice icon
html.find(".chat-control-icon").click(async () => {
new game.l5r5e.DicePickerDialog().render();
});
}
/**
* Chat Message
*/
static renderChatMessage(message, html, data) {
// Add a extra CSS class to roll
if (message.isRoll) {
html.addClass("roll");
html.on("click", ".chat-dice-rnk", game.l5r5e.RollnKeepDialog.onChatAction.bind(this));
}
}
/**
* Combat tracker
*/
static async renderCombatTracker(app, html, data) {
// Display Combat bar (only for GMs)
await this._gmCombatBar(app, html, data);
}
/**
* Display a GM bar for Combat/Initiative
* @private
*/
static async _gmCombatBar(app, html, data) {
// Only for GMs
if (!game.user.isGM) {
return;
}
// *** 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"),
};
// *** Template ***
const tpl = await renderTemplate(`${CONFIG.l5r5e.paths.templates}gm/combat-tracker-bar.html`, {
encounterType: game.settings.get("l5r5e", "initiative.encounter"),
encounterTypeList,
prepared,
});
// Add/replace in bar
const elmt = html.find("#l5r5e_gm_combat_tracker_bar");
if (elmt.length > 0) {
elmt.replaceWith(tpl);
} else {
html.find("#combat-round").append(tpl);
}
// Buttons Listeners
// TODO event for multiple GM
html.find(".encounter-control").on("click", (event) => {
event.preventDefault();
event.stopPropagation();
const encounter = $(event.currentTarget).data("id");
if (!encounterTypeList.includes(encounter)) {
return;
}
game.settings
.set("l5r5e", "initiative.encounter", encounter)
.then(() => HooksL5r5e._gmCombatBar(app, html, data));
});
html.find(".prepared-control").on("click", (event) => {
event.preventDefault();
event.stopPropagation();
let 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 = preparedId === "minion" ? "false" : "null";
break;
case "null":
value = "false";
break;
}
game.settings
.set("l5r5e", `initiative.prepared.${preparedId}`, value)
.then(() => HooksL5r5e._gmCombatBar(app, html, data));
});
}
/**
* Compendium display
*/
static async renderCompendium(app, html, data) {
// Add Rank & Ring in the compendium
if (app.entity === "Item") {
const content = await app.getContent();
content.forEach((item) => {
if (!!item.data.data.ring || !!item.data.data.rank) {
html.find(`[data-entry-id="${item._id}"]`).append(
`<i` +
(item.data.data.ring ? ` class="i_${item.data.data.ring}"` : ``) +
`>` +
(item.data.data.rank ? game.i18n.localize("l5r5e.rank") + " " + item.data.data.rank : "") +
`</i>`
);
}
});
return false;
}
}
/**
* DiceSoNice Hook
*/
static diceSoNiceReady(dice3d) {
const texturePath = `${CONFIG.l5r5e.paths.assets}dices/default/3d/`;
// dice3d.addSystem({
// id: "l5r5e",
// name: "Legend of the Five Rings 5E"
// }, "force");
// Rings
dice3d.addDicePreset(
{
name: "L5R Ring Dice",
type: "ddr", // don't known why the "dd" prefix is required, term is "r"
labels: Object.keys(game.l5r5e.RingDie.FACES).map(
(e) => `${texturePath}${game.l5r5e.RingDie.FACES[e].image.replace("ring_", "")}.png`
),
bumpMaps: Object.keys(game.l5r5e.RingDie.FACES).map(
(e) => `${texturePath}${game.l5r5e.RingDie.FACES[e].image.replace("ring_", "")}_bm.png`
),
colorset: "black",
system: "standard",
},
"d6"
);
// Skills
dice3d.addDicePreset(
{
name: "L5R Skill Dice",
type: "dds",
labels: Object.keys(game.l5r5e.AbilityDie.FACES).map(
(e) => `${texturePath}${game.l5r5e.AbilityDie.FACES[e].image.replace("skill_", "")}.png`
),
bumpMaps: Object.keys(game.l5r5e.AbilityDie.FACES).map(
(e) => `${texturePath}${game.l5r5e.AbilityDie.FACES[e].image.replace("skill_", "")}_bm.png`
),
colorset: "white",
system: "standard",
},
"d12"
);
}
}

View File

@@ -89,7 +89,7 @@ export class ItemSheetL5r5e extends ItemSheet {
event.stopPropagation(); event.stopPropagation();
const elmt = $(event.currentTarget).data("toggle"); const elmt = $(event.currentTarget).data("toggle");
const tgt = html.find("." + elmt); const tgt = html.find("." + elmt);
tgt.hasClass("toggle-active") ? tgt.removeClass("toggle-active") : tgt.addClass("toggle-active"); tgt.toggleClass("toggle-active");
}); });
// Everything below here is only needed if the sheet is editable // Everything below here is only needed if the sheet is editable

View File

@@ -1,4 +1,3 @@
import { L5R5E } from "../config.js";
import { ItemSheetL5r5e } from "./item-sheet.js"; import { ItemSheetL5r5e } from "./item-sheet.js";
/** /**
@@ -20,7 +19,7 @@ export class WeaponSheetL5r5e extends ItemSheetL5r5e {
const sheetData = await super.getData(); const sheetData = await super.getData();
// Martial skills only // Martial skills only
sheetData.data.skills = Array.from(L5R5E.skills) sheetData.data.skills = Array.from(CONFIG.l5r5e.skills)
.filter(([id, cat]) => cat === "martial") .filter(([id, cat]) => cat === "martial")
.map(([id, cat]) => id); .map(([id, cat]) => id);

View File

@@ -4,18 +4,22 @@ import { HelpersL5r5e } from "./helpers.js";
import { SocketHandlerL5r5e } from "./socket-handler.js"; import { SocketHandlerL5r5e } from "./socket-handler.js";
import { RegisterSettings } from "./settings.js"; import { RegisterSettings } from "./settings.js";
import { PreloadTemplates } from "./preloadTemplates.js"; import { PreloadTemplates } from "./preloadTemplates.js";
import { RegisterHandlebars } from "./handlebars.js";
import { HelpDialog } from "./help/help-dialog.js"; import { HelpDialog } from "./help/help-dialog.js";
import HooksL5r5e from "./hooks.js";
// Actors // Actors
import { ActorL5r5e } from "./actor.js"; import { ActorL5r5e } from "./actor.js";
import { CharacterSheetL5r5e } from "./actors/character-sheet.js"; import { CharacterSheetL5r5e } from "./actors/character-sheet.js";
import { NpcSheetL5r5e } from "./actors/npc-sheet.js"; import { NpcSheetL5r5e } from "./actors/npc-sheet.js";
// Dice and rolls // Dice and rolls
import { L5rBaseDie } from "./dice/dietype/l5r-base-die.js";
import { AbilityDie } from "./dice/dietype/ability-die.js"; import { AbilityDie } from "./dice/dietype/ability-die.js";
import { RingDie } from "./dice/dietype/ring-die.js"; import { RingDie } from "./dice/dietype/ring-die.js";
import { RollL5r5e } from "./dice/roll.js"; import { RollL5r5e } from "./dice/roll.js";
import { DicePickerDialog } from "./dice/dice-picker-dialog.js"; import { DicePickerDialog } from "./dice/dice-picker-dialog.js";
import { RollnKeepDialog } from "./dice/roll-n-keep-dialog.js"; import { RollnKeepDialog } from "./dice/roll-n-keep-dialog.js";
import { _sortCombatants, rollInitiative } from "./combat.js"; import { CombatL5r5e } from "./combat.js";
import { GmToolsDialog } from "./dice/gm-tools-dialog.js";
// Items // Items
import { ItemL5r5e } from "./item.js"; import { ItemL5r5e } from "./item.js";
import { ItemSheetL5r5e } from "./items/item-sheet.js"; import { ItemSheetL5r5e } from "./items/item-sheet.js";
@@ -28,11 +32,13 @@ import { PeculiaritySheetL5r5e } from "./items/peculiarity-sheet.js";
// JournalEntry // JournalEntry
import { JournalL5r5e } from "./journal.js"; import { JournalL5r5e } from "./journal.js";
import { BaseJournalSheetL5r5e } from "./journals/base-journal-sheet.js"; import { BaseJournalSheetL5r5e } from "./journals/base-journal-sheet.js";
// Specific
import { MigrationL5r5e } from "./migration.js";
/* ------------------------------------ */ /* ------------------------------------ */
/* Initialize system */ /* Initialize system */
/* ------------------------------------ */ /* ------------------------------------ */
Hooks.once("init", async function () { Hooks.once("init", async () => {
// ***** Initializing l5r5e ***** // ***** Initializing l5r5e *****
// Ascii art :p // Ascii art :p
console.log( console.log(
@@ -48,6 +54,7 @@ Hooks.once("init", async function () {
CONFIG.l5r5e = L5R5E; CONFIG.l5r5e = L5R5E;
// Assign custom classes and constants here // Assign custom classes and constants here
CONFIG.Combat.entityClass = CombatL5r5e;
CONFIG.Actor.entityClass = ActorL5r5e; CONFIG.Actor.entityClass = ActorL5r5e;
CONFIG.Actor.sheetClasses = CharacterSheetL5r5e; CONFIG.Actor.sheetClasses = CharacterSheetL5r5e;
CONFIG.Item.entityClass = ItemL5r5e; CONFIG.Item.entityClass = ItemL5r5e;
@@ -64,25 +71,29 @@ Hooks.once("init", async function () {
// Add some classes in game // Add some classes in game
game.l5r5e = { game.l5r5e = {
L5rBaseDie,
RingDie,
AbilityDie,
HelpersL5r5e, HelpersL5r5e,
RollL5r5e, RollL5r5e,
DicePickerDialog, DicePickerDialog,
RollnKeepDialog, RollnKeepDialog,
GmToolsDialog,
ActorL5r5e,
HelpDialog, HelpDialog,
sockets: new SocketHandlerL5r5e(), sockets: new SocketHandlerL5r5e(),
migrations: MigrationL5r5e,
}; };
// Register custom system settings // Register custom system settings
RegisterSettings(); RegisterSettings();
// Register custom Handlebars Helpers
RegisterHandlebars();
// Preload Handlebars templates // Preload Handlebars templates
await PreloadTemplates(); await PreloadTemplates();
// ***** Combat *****
Combat.prototype.rollInitiative = rollInitiative;
Combat.prototype._sortCombatants = _sortCombatants;
// game.combat.settings.resource = "fatigue.value"; // nope :/
// ***** Register custom sheets ***** // ***** Register custom sheets *****
// Actors // Actors
Actors.unregisterSheet("core", ActorSheet); Actors.unregisterSheet("core", ActorSheet);
@@ -102,186 +113,19 @@ Hooks.once("init", async function () {
// Journal // Journal
Items.unregisterSheet("core", JournalSheet); Items.unregisterSheet("core", JournalSheet);
Items.registerSheet("l5r5e", BaseJournalSheetL5r5e, { makeDefault: true }); Items.registerSheet("l5r5e", BaseJournalSheetL5r5e, { makeDefault: true });
// ***** Handlebars *****
// for debug
Handlebars.registerHelper("json", function (...objects) {
objects.pop(); // remove this function call
return new Handlebars.SafeString(objects.map((e) => `<textarea>${JSON.stringify(e)}</textarea>`));
});
// Add props "checked" if a and b are equal ({{radioChecked a b}}
Handlebars.registerHelper("radioChecked", function (a, b) {
return a === b ? new Handlebars.SafeString('checked="checked"') : "";
});
Handlebars.registerHelper("localizeSkill", function (categoryId, skillId) {
const key = "l5r5e.skills." + categoryId.toLowerCase() + "." + skillId.toLowerCase();
return game.i18n.localize(key);
});
Handlebars.registerHelper("localizeSkillId", function (skillId) {
const key = "l5r5e.skills." + L5R5E.skills.get(skillId.toLowerCase()) + "." + skillId.toLowerCase();
return game.i18n.localize(key);
});
Handlebars.registerHelper("localizeRing", function (ringId) {
const key = "l5r5e.rings." + ringId.toLowerCase();
return game.i18n.localize(key);
});
Handlebars.registerHelper("localizeStanceTip", function (ringId) {
const key = "l5r5e.conflict.stances." + ringId.toLowerCase() + "tip";
return game.i18n.localize(key);
});
Handlebars.registerHelper("localizeTechnique", function (techniqueName) {
return game.i18n.localize("l5r5e.techniques." + techniqueName.toLowerCase());
});
// Utility conditional, usable in nested expression
// {{#ifCond (ifCond advancement.type '==' 'technique') '||' (ifCond item.data.technique_type '==' 'kata')}}
// {{#ifCond '["distinction","passion"]' 'includes' item.data.peculiarity_type}}
Handlebars.registerHelper("ifCond", function (a, operator, b, options) {
let result = false;
switch (operator) {
case "==":
result = a == b;
break;
case "===":
result = a === b;
break;
case "!=":
result = a != b;
break;
case "!==":
result = a !== b;
break;
case "<":
result = a < b;
break;
case "<=":
result = a <= b;
break;
case ">":
result = a > b;
break;
case ">=":
result = a >= b;
break;
case "&&":
result = a && b;
break;
case "||":
result = a || b;
break;
case "includes":
result = a && b && a.includes(b);
break;
default:
break;
}
if (typeof options.fn === "function") {
return result ? options.fn(this) : options.inverse(this);
}
return result;
});
}); });
/* ------------------------------------ */ /* ------------------------------------ */
/* Setup system */ /* Hooks Once */
/* ------------------------------------ */ /* ------------------------------------ */
Hooks.once("setup", function () { Hooks.once("setup", HooksL5r5e.setup);
// Do anything after initialization but before ready Hooks.once("ready", HooksL5r5e.ready);
// Embed Babele compendiums Hooks.once("diceSoNiceReady", (dice3d) => HooksL5r5e.diceSoNiceReady(dice3d));
/* eslint-disable no-undef */
if (
typeof Babele !== "undefined" &&
Babele.get().modules.every((module) => module.lang !== "fr" || module.module !== "l5r5e-dev")
) {
Babele.get().register({
module: "../systems/l5r5e", // babele only accept modules, so... well :D
lang: "fr",
dir: "babele/fr-fr",
});
}
});
/* ------------------------------------ */ /* ------------------------------------ */
/* Do anything once the system is ready */ /* Hooks On */
/* ------------------------------------ */ /* ------------------------------------ */
Hooks.once("ready", function () { Hooks.on("renderSidebarTab", (app, html, data) => HooksL5r5e.renderSidebarTab(app, html, data));
// Add title on button dice icon Hooks.on("renderChatMessage", (message, html, data) => HooksL5r5e.renderChatMessage(message, html, data));
$(".chat-control-icon")[0].title = game.i18n.localize("l5r5e.chatdices.dicepicker"); Hooks.on("renderCombatTracker", (app, html, data) => HooksL5r5e.renderCombatTracker(app, html, data));
Hooks.on("renderCompendium", async (app, html, data) => HooksL5r5e.renderCompendium(app, html, data));
// Open Help dialog on clic on logo
$("#logo")
.on("click", () => new game.l5r5e.HelpDialog().render(true))
.prop("title", game.i18n.localize("l5r5e.logo.alt"));
});
/* ------------------------------------ */
/* SidebarTab */
/* ------------------------------------ */
Hooks.on("renderSidebarTab", (app, html, data) => {
// Add button on dice icon
html.find(".chat-control-icon").click(async () => {
new game.l5r5e.DicePickerDialog().render();
});
});
/* ------------------------------------ */
/* Chat Message */
/* ------------------------------------ */
Hooks.on("renderChatMessage", (message, html, data) => {
// Add a extra CSS class to roll
if (message.isRoll) {
html.addClass("roll");
html.on("click", ".chat-dice-rnk", RollnKeepDialog.onChatAction.bind(this));
}
});
/* ------------------------------------ */
/* DiceSoNice Hook */
/* ------------------------------------ */
Hooks.once("diceSoNiceReady", (dice3d) => {
const texturePath = `${CONFIG.l5r5e.paths.assets}dices/default/3d/`;
// dice3d.addSystem({
// id: "l5r5e",
// name: "Legend of the Five Rings 5E"
// }, "force");
// Rings
dice3d.addDicePreset(
{
name: "L5R Ring Dice",
type: "ddr", // don't known why the "dd" prefix is required, term is "r"
labels: Object.keys(RingDie.FACES).map(
(e) => `${texturePath}${RingDie.FACES[e].image.replace("ring_", "")}.png`
),
bumpMaps: Object.keys(RingDie.FACES).map(
(e) => `${texturePath}${RingDie.FACES[e].image.replace("ring_", "")}_bm.png`
),
colorset: "black",
system: "standard",
},
"d6"
);
// Skills
dice3d.addDicePreset(
{
name: "L5R Skill Dice",
type: "dds",
labels: Object.keys(AbilityDie.FACES).map(
(e) => `${texturePath}${AbilityDie.FACES[e].image.replace("skill_", "")}.png`
),
bumpMaps: Object.keys(AbilityDie.FACES).map(
(e) => `${texturePath}${AbilityDie.FACES[e].image.replace("skill_", "")}_bm.png`
),
colorset: "white",
system: "standard",
},
"d12"
);
});

227
system/scripts/migration.js Normal file
View File

@@ -0,0 +1,227 @@
/**
* L5R Migration class
*/
export class MigrationL5r5e {
/**
* Version needed for migration stuff to trigger
* @type {string}
*/
static NEEDED_VERSION = "1.1.0";
/**
* Return true if the current world need some updates
* @returns {boolean}
*/
static needUpdate() {
const currentVersion = game.settings.get("l5r5e", "systemMigrationVersion");
return currentVersion && isNewerVersion(MigrationL5r5e.NEEDED_VERSION, currentVersion);
}
/**
* Perform a system migration for the entire World, applying migrations for Actors, Items, and Compendium packs
* @return {Promise} A Promise which resolves once the migration is completed
*/
static async migrateWorld() {
if (!game.user.isGM) {
return;
}
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.`,
{ permanent: true }
);
// Migrate World Actors
for (let a of game.actors.entities) {
try {
const updateData = MigrationL5r5e._migrateActorData(a.data);
if (!isObjectEmpty(updateData)) {
console.log(`Migrating Actor entity ${a.name}`);
await a.update(updateData, { enforceTypes: false });
}
} catch (err) {
err.message = `Failed L5R5e system migration for Actor ${a.name}: ${err.message}`;
console.error(err);
}
}
// Migrate World Items
for (let i of game.items.entities) {
try {
const updateData = MigrationL5r5e._migrateItemData(i.data);
if (!isObjectEmpty(updateData)) {
console.log(`Migrating Item entity ${i.name}`);
await i.update(updateData, { enforceTypes: false });
}
} catch (err) {
err.message = `Failed L5R5e system migration for Item ${i.name}: ${err.message}`;
console.error(err);
}
}
// Migrate Actor Override Tokens
for (let s of game.scenes.entities) {
try {
const updateData = MigrationL5r5e._migrateSceneData(s.data);
if (!isObjectEmpty(updateData)) {
console.log(`Migrating Scene entity ${s.name}`);
await s.update(updateData, { enforceTypes: false });
}
} catch (err) {
err.message = `Failed L5R5e system migration for Scene ${s.name}: ${err.message}`;
console.error(err);
}
}
// Migrate World Compendium Packs
for (let p of game.packs) {
if (p.metadata.package !== "world") {
continue;
}
if (!["Actor", "Item", "Scene"].includes(p.metadata.entity)) {
continue;
}
await MigrationL5r5e._migrateCompendium(p);
}
// Set the migration as complete
await game.settings.set("l5r5e", "systemMigrationVersion", game.system.data.version);
ui.notifications.info(`L5R5e System Migration to version ${game.system.data.version} completed!`, {
permanent: true,
});
}
/**
* Apply migration rules to all Entities within a single Compendium pack
* @param pack
* @return {Promise}
*/
static async _migrateCompendium(pack) {
const entity = pack.metadata.entity;
if (!["Actor", "Item", "Scene"].includes(entity)) {
return;
}
// Unlock the pack for editing
const wasLocked = pack.locked;
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();
// 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);
break;
case "Item":
updateData = MigrationL5r5e._migrateItemData(ent.data);
break;
case "Scene":
updateData = MigrationL5r5e._migrateSceneData(ent.data);
break;
}
if (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);
}
}
// Apply the original locked status for the pack
pack.configure({ locked: wasLocked });
console.log(`Migrated all ${entity} entities from Compendium ${pack.collection}`);
}
/**
* Migrate a single Scene entity to incorporate changes to the data model of it's actor data overrides
* Return an Object of updateData to be applied
* @param {Object} scene The Scene data to Update
* @return {Object} The updateData to apply
*/
static _migrateSceneData(scene) {
const tokens = duplicate(scene.tokens);
return {
tokens: tokens.map((t) => {
if (!t.actorId || t.actorLink || !t.actorData.data) {
t.actorData = {};
return t;
}
const token = new Token(t);
if (!token.actor) {
t.actorId = null;
t.actorData = {};
} else if (!t.actorLink) {
const updateData = MigrationL5r5e._migrateActorData(token.data.actorData);
t.actorData = mergeObject(token.data.actorData, updateData);
}
return t;
}),
};
}
/**
* Migrate a single Actor entity to incorporate latest data model changes
* Return an Object of updateData to be applied
* @param {Actor} actor The actor to Update
* @return {Object} The updateData to apply
*/
static _migrateActorData(actor) {
const updateData = {};
const actorData = actor.data;
// ***** Start of 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
);
}
}
// ***** End of 1.1.0 *****
return updateData;
}
/**
* Scrub an Actor's system data, removing all keys which are not explicitly defined in the system template
* @param {Object} actorData The data object for an Actor
* @return {Object} The scrubbed Actor data
*/
static cleanActorData(actorData) {
const model = game.system.model.Actor[actorData.type];
actorData.data = filterObject(actorData.data, model);
return actorData;
}
/**
* Migrate a single Item entity to incorporate latest data model changes
* @param item
*/
static _migrateItemData(item) {
// Nothing for now
return {};
}
}

View File

@@ -21,6 +21,7 @@ export const PreloadTemplates = async function () {
"systems/l5r5e/templates/actors/npc/social.html", "systems/l5r5e/templates/actors/npc/social.html",
"systems/l5r5e/templates/actors/npc/rings.html", "systems/l5r5e/templates/actors/npc/rings.html",
"systems/l5r5e/templates/actors/npc/attributes.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/skill.html",
"systems/l5r5e/templates/actors/npc/techniques.html", "systems/l5r5e/templates/actors/npc/techniques.html",
// items // items

View File

@@ -1,4 +1,61 @@
/**
* Custom system settings register
*/
export const RegisterSettings = function () {
/* ------------------------------------ */
/* Update */
/* ------------------------------------ */
game.settings.register("l5r5e", "systemMigrationVersion", {
name: "System Migration Version",
scope: "world",
config: false,
type: String,
default: 0,
});
export const RegisterSettings = function() { /* ------------------------------------ */
// Register any custom system settings here /* Initiative Roll Dialog (GM only) */
} /* ------------------------------------ */
game.settings.register("l5r5e", "initiative.difficulty.hidden", {
name: "Initiative difficulty is hidden",
scope: "world",
config: false,
type: Boolean,
default: false,
});
game.settings.register("l5r5e", "initiative.difficulty.value", {
name: "Initiative difficulty value",
scope: "world",
config: false,
type: Number,
default: 2,
});
game.settings.register("l5r5e", "initiative.encounter", {
name: "Initiative encounter type",
scope: "world",
config: false,
type: String,
default: "skirmish",
});
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", {
name: "Initiative NPC adversary are prepared or not",
scope: "world",
config: false,
type: String,
default: "null",
});
game.settings.register("l5r5e", "initiative.prepared.minion", {
name: "Initiative NPC minion are prepared or not",
scope: "world",
config: false,
type: String,
default: "true",
});
};

View File

@@ -48,7 +48,7 @@ export class SocketHandlerL5r5e {
} }
/** /**
* Refresh a app by it's id, not windowsId (ex "l5r5e-twenty-questions-dialog-kZHczAFghMNYFRWe", not "65") * Refresh a app by it's htmlId, not windowsId (ex "l5r5e-twenty-questions-dialog-kZHczAFghMNYFRWe", not "65")
* usage : game.l5r5e.sockets.refreshAppId(appId); * usage : game.l5r5e.sockets.refreshAppId(appId);
* @param appId * @param appId
*/ */
@@ -60,10 +60,7 @@ export class SocketHandlerL5r5e {
} }
_onRefreshAppId(data) { _onRefreshAppId(data) {
const app = Object.values(ui.windows).find((e) => e.id === data.appId); const app = Object.values(ui.windows).find((e) => e.id === data.appId);
if (!app) { if (!app || typeof app.refresh !== "function") {
return;
}
if (typeof app.refresh !== "function") {
return; return;
} }
app.refresh(); app.refresh();

File diff suppressed because one or more lines are too long

View File

@@ -47,11 +47,13 @@ form .form-group .form-fields button,
.dialog .dialog-buttons button, .dialog .dialog-buttons button,
.item-edit, .item-edit,
.item-delete, .item-delete,
.item-equip,
.technique-edit, .technique-edit,
.technique-delete, .technique-delete,
.peculiarity-edit, .peculiarity-edit,
.peculiarity-delete, .peculiarity-delete,
.attribute-dtype, .attribute-dtype,
.equip-readied-control,
form button, form button,
label { label {
cursor: url("../assets/cursors/pointer.webp"), pointer !important; cursor: url("../assets/cursors/pointer.webp"), pointer !important;

View File

@@ -67,6 +67,7 @@
text-align: center; text-align: center;
background: none; background: none;
border: none; border: none;
height: calc(100% - 3rem);
td:first-child { td:first-child {
width: 200px; width: 200px;
@@ -184,3 +185,59 @@
border: 3px solid green; border: 3px solid green;
} }
} }
#l5r5e-gm-tools-dialog {
bottom: 0;
right: 0.5rem;
display: flex;
background-position: center;
background-size: 100%;
background: linear-gradient(
$l5r5e-linear-gradient-second,
$l5r5e-linear-gradient-second-dark,
$l5r5e-linear-gradient-second
);
background-origin: padding-box;
border: 1px solid rgb(195, 165, 130);
background-origin: padding-box;
border-image: url("../assets/ui/macro-button.webp") 10 repeat;
border-image-width: 0.5rem;
border-image-outset: 0px;
.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;
}
}
.window-content {
text-align: center;
vertical-align: middle;
background: transparent;
color: $white-light;
.gm-tools-container {
flex: 1;
display: flex;
flex-flow: wrap;
a {
flex: 1;
cursor: url("../assets/cursors/pointer.webp"), pointer;
i {
font-size: 3rem;
line-height: 4rem;
vertical-align: middle;
}
}
.difficulty {
flex: 1;
font-size: 3rem;
}
}
}
// hide "search anywhere" draggable icon
.window-draggable-handle {
display: none;
}
}

View File

@@ -279,3 +279,15 @@ i.i_skill {
height: 1rem; height: 1rem;
width: 1rem; width: 1rem;
} }
// Compendium
.compendium {
.item {
i {
font-family: $font-primary;
&:before {
font-family: $font-logoType;
}
}
}
}

View File

@@ -62,6 +62,28 @@ body {
} }
} }
} }
// Compendium
.compendium {
.item {
position: relative;
i {
float: right;
line-height: 1rem;
text-align: right;
font-size: 0.75rem;
color: rgba(240, 240, 225, 0.75);
font-style: italic;
flex: 0 0 auto;
position: absolute;
right: 0;
text-shadow: 0 0 0 rgba(255, 255, 255, 0.1);
&:before {
margin: 0 0.25rem 0 0;
font-style: normal;
}
}
}
}
} }
&.sheet, &.sheet,
&.npc, &.npc,
@@ -166,7 +188,7 @@ fieldset {
flex: 1; flex: 1;
display: flex; display: flex;
margin: 0 0.25rem; margin: 0 0.25rem;
padding: 0.25rem 0.5rem; padding: 0.5rem;
border: 1px solid $l5r5e-title; border: 1px solid $l5r5e-title;
legend { legend {
color: $l5r5e-label; color: $l5r5e-label;
@@ -181,16 +203,21 @@ input[type="text"],
input[type="number"], input[type="number"],
input[type="password"], input[type="password"],
input[type="date"], input[type="date"],
input[type="time"] { input[type="time"],
text-align: center; textarea {
padding: 0.25rem; padding: 0.25rem;
background: $l5r5e-white; background: $l5r5e-white;
border: 1px solid $l5r5e-title; border: 1px solid $l5r5e-title;
color: $l5r5e-bold; color: $l5r5e-bold;
resize: vertical;
border-radius: 0;
&[disabled] { &[disabled] {
background: $l5r5e-white-light; background: $l5r5e-white-light;
} }
} }
input[type="number"] {
text-align: center;
}
// Editors // Editors
.editor, .editor,
@@ -264,6 +291,39 @@ sup {
} }
} }
.prepared {
&-character {
color: $l5r5e-earth;
}
&-adversary {
color: $l5r5e-fire;
}
&-minion {
color: $l5r5e-water;
}
&-icon {
font-weight: 900;
font-family: "Font Awesome 5 Free";
-moz-osx-font-smoothing: grayscale;
-webkit-font-smoothing: antialiased;
display: inline-block;
font-style: normal;
font-variant: normal;
text-rendering: auto;
line-height: 1;
width: 1.5rem;
&-true:before {
content: "\f06e";
}
&-false:before {
content: "\f070";
}
&-null:before {
content: "\f2a8";
}
}
}
// Fix for "search anywhere" draggable icon // Fix for "search anywhere" draggable icon
.window-draggable-handle { .window-draggable-handle {
z-index: 2; z-index: 2;

View File

@@ -19,6 +19,7 @@
} }
.item-edit, .item-edit,
.item-delete, .item-delete,
.item-equip,
.technique-edit, .technique-edit,
.technique-delete, .technique-delete,
.peculiarity-edit, .peculiarity-edit,
@@ -29,6 +30,7 @@
font-size: 0.75rem; font-size: 0.75rem;
flex: 0 0 1rem; flex: 0 0 1rem;
padding: 0 0.1rem; padding: 0 0.1rem;
color: $black-light;
} }
.icon-stat-container { .icon-stat-container {
line-height: 1rem; line-height: 1rem;
@@ -38,6 +40,7 @@
} }
.item-edit, .item-edit,
.item-delete, .item-delete,
.item-equip,
.technique-edit, .technique-edit,
.technique-delete, .technique-delete,
.peculiarity-edit, .peculiarity-edit,
@@ -46,6 +49,7 @@
.property-delete { .property-delete {
&:hover { &:hover {
text-shadow: 0 0 3px $red; text-shadow: 0 0 3px $red;
color: $black;
} }
} }
} }
@@ -68,6 +72,12 @@
margin-right: 0; margin-right: 0;
} }
} }
.equip-readied-control {
&:hover {
color: $l5r5e-red;
background: $white;
}
}
} }
p { p {
font-size: 0.85rem; font-size: 0.85rem;

View File

@@ -96,6 +96,7 @@
width: 100%; width: 100%;
line-height: 2rem; line-height: 2rem;
font-size: 0.75rem; font-size: 0.75rem;
margin: 0.25rem 0.25rem 0.5rem;
text-align: center; text-align: center;
li { li {
flex: 1; flex: 1;
@@ -144,6 +145,12 @@
flex: 0 0 calc(100% - 0.5rem); flex: 0 0 calc(100% - 0.5rem);
margin: 1rem 0.25rem 0; margin: 1rem 0.25rem 0;
} }
.initiative-wrapper {
margin-bottom: 0.5rem;
}
&:last-child {
padding-bottom: 1rem;
}
} }
.npc-note { .npc-note {
.editor { .editor {

View File

@@ -8,7 +8,7 @@
} }
&.actor { &.actor {
.sheet-header { .sheet-header {
height: 27rem; height: 26rem;
h1 { h1 {
flex: auto; flex: auto;
margin: 0 0 0.25rem 0.5rem; margin: 0 0 0.25rem 0.5rem;
@@ -24,25 +24,6 @@
} }
} }
} }
.initiative {
&-wrapper {
display: block;
flex: 100%;
text-align: center;
}
button {
width: 22%;
margin: 0 0.25rem 0.25rem;
padding: 0 0.5rem;
color: #5a6e5a;
background: rgba(255, 255, 255, 0.5);
border: 1px solid #5a6e5a;
border-radius: 1rem;
}
button:focus {
box-shadow: none;
}
}
fieldset { fieldset {
&.advancement { &.advancement {
display: block; display: block;
@@ -53,12 +34,6 @@
line-height: 2rem; line-height: 2rem;
font-size: 1rem; font-size: 1rem;
} }
.compromised {
input {
border: 1px solid $l5r5e-red;
box-shadow: 0 1px 5px $l5r5e-red;
}
}
} }
form { form {
display: flex; display: flex;
@@ -126,6 +101,12 @@
0% calc(100% - var(--notchSize)) 0% calc(100% - var(--notchSize))
); );
} }
.compromised {
input {
border: 1px solid $l5r5e-red;
box-shadow: 0 1px 5px $l5r5e-red;
}
}
.header-fields { .header-fields {
position: relative; position: relative;
flex: 0 0 100%; flex: 0 0 100%;
@@ -235,14 +216,14 @@
width: 40%; width: 40%;
padding: 0; padding: 0;
position: relative; position: relative;
top: -2.5rem; top: -1.5rem;
} }
.social-content, .social-content,
.attributes-wrapper { .attributes-wrapper {
flex: none; flex: none;
float: left; float: left;
width: 30%; width: 30%;
flex-direction: column; flex-wrap: wrap;
display: flex; display: flex;
padding: 0.5rem 0 0 0.25rem; padding: 0.5rem 0 0 0.25rem;
border-left: 2px solid $l5r5e-title; border-left: 2px solid $l5r5e-title;
@@ -289,12 +270,33 @@
margin: 0 0.25rem; margin: 0 0.25rem;
height: 2rem; height: 2rem;
&[disabled] { &[disabled] {
flex: 0 0 3rem;
background: $l5r5e-white-light; background: $l5r5e-white-light;
} }
} }
} }
} }
.focus-content,
.vigilance-content {
flex: 0 0 50%;
padding-bottom: 0.5rem;
.attribute-label {
flex-wrap: wrap;
height: auto;
strong {
flex: 100%;
text-align: center;
}
input {
flex: 1 0 3rem;
}
&:before {
top: auto;
bottom: 0.1rem;
height: calc(100% - 1.45rem);
width: calc(100% - 0.4rem);
}
}
}
.attributes-wrapper { .attributes-wrapper {
padding: 0.5rem 0.25rem 0 0; padding: 0.5rem 0.25rem 0 0;
border-left: 0 none; border-left: 0 none;
@@ -304,31 +306,38 @@
left: auto; left: auto;
right: -0.25rem; right: -0.25rem;
} }
&.void-content { &.focus-content {
&:before { &:before {
width: 0; width: 0;
} }
} }
&.vigilance-content {
&:before {
width: 160%;
}
}
&.void-content {
&:before {
width: 90%;
}
}
} }
label { label {
flex-direction: row; flex-direction: row;
width: 100%;
strong { strong {
text-align: right; text-align: right;
} }
&:nth-child(2) { &:nth-child(2) {
position: relative;
flex: 50%;
right: 1.5rem;
strong { strong {
position: absolute; position: absolute;
top: 0; top: 0;
left: 0; left: 0;
font-size: 0.65rem; font-size: 0.65rem;
width: 3rem; width: 3rem;
color: $l5r5e-black; color: $l5r5e-black-light;
} }
input { input {
border-top: 0 none;
font-size: 1.25rem; font-size: 1.25rem;
padding-top: 0.75rem; padding-top: 0.75rem;
} }
@@ -336,19 +345,24 @@
} }
.endurance-content, .endurance-content,
.composure-content { .composure-content {
input { label:nth-child(1) {
&[disabled] { strong {
flex: 0 0 5rem; flex: 0 0 calc(100% - 6rem);
}
input {
flex: 0 0 5.5rem;
padding-right: 3rem; padding-right: 3rem;
} }
} }
label:nth-child(2) {
position: absolute;
right: 0;
width: 3.5rem;
}
} }
.void-content { .void-content {
display: flex; width: 100%;
position: absolute; padding-top: 0.25rem;
bottom: 0.25rem;
right: 35%;
width: 10rem;
label { label {
margin: 0; margin: 0;
strong { strong {
@@ -357,7 +371,7 @@
&:after { &:after {
content: "/"; content: "/";
position: absolute; position: absolute;
right: 2.9rem; right: 1.25rem;
font-size: 1rem; font-size: 1rem;
bottom: 0.6rem; bottom: 0.6rem;
color: $l5r5e-bold; color: $l5r5e-bold;
@@ -375,8 +389,9 @@
text-align: right; text-align: right;
padding-left: 0.25rem; padding-left: 0.25rem;
padding-top: 0.75rem; padding-top: 0.75rem;
position: relative; position: absolute;
right: 2rem; right: 0.25rem;
width: 1rem;
} }
} }
} }
@@ -414,6 +429,71 @@
} }
} }
} }
.focus-content,
.vigilance-content {
p {
bottom: -3.75rem;
}
}
}
.attribute-label {
position: relative;
&:before {
z-index: -1;
content: "";
position: absolute;
height: calc(100% - 0.85rem);
width: 3.1rem;
border: 1px solid $l5r5e-title;
border-radius: 0;
top: 0.15rem;
left: 0.15rem;
}
}
.identity-content {
.attribute-label {
&:before {
height: calc(100% - 0.6rem);
width: calc(100% - 0.65rem);
left: auto;
top: 0.15rem;
right: 0.85rem;
}
}
li:nth-child(3),
li:nth-child(5) {
.attribute-label {
&:before {
height: calc(100% - 0.6rem);
width: calc(100% + 0.25rem);
left: auto;
top: 0.15rem;
right: -0.15rem;
}
}
}
}
.attributes-wrapper {
.attribute-label {
&:nth-child(2) {
&:before {
left: auto;
right: 3.15rem;
width: 2.6rem;
}
}
&:before {
left: auto;
right: 0.15rem;
}
}
}
.void-content {
.attribute-label {
&:before {
width: 3.85rem;
}
}
} }
} }
article { article {
@@ -476,7 +556,9 @@
} }
} }
.stances-content { .stances-content {
flex: 0 0 100%; flex: 100%;
height: 100%;
align-self: flex-start;
.item-list { .item-list {
position: relative; position: relative;
padding-top: 2rem; padding-top: 2rem;
@@ -529,7 +611,7 @@
} }
.xp, .xp,
.money-wrapper { .money-wrapper {
flex: 0 0 5rem; flex: 0 0 6rem;
flex-direction: column; flex-direction: column;
color: $black-light; color: $black-light;
label { label {
@@ -592,6 +674,27 @@
} }
&.actor, &.actor,
&.npc { &.npc {
.initiative {
&-wrapper {
flex: 100%;
height: 100%;
align-self: flex-start;
text-align: center;
display: block;
}
button {
width: 22%;
margin: 0 0.25rem 0.25rem;
padding: 0 0.5rem;
color: #5a6e5a;
background: rgba(255, 255, 255, 0.5);
border: 1px solid #5a6e5a;
border-radius: 1rem;
}
button:focus {
box-shadow: none;
}
}
.limited { .limited {
h1 { h1 {
margin: 0.5rem 0; margin: 0.5rem 0;

View File

@@ -60,8 +60,6 @@
article { article {
padding: 2% 2% 2% 18%; padding: 2% 2% 2% 18%;
label { label {
font-size: 0.85rem;
line-height: 2rem;
&.full { &.full {
display: block; display: block;
width: 100%; width: 100%;
@@ -79,6 +77,10 @@
> label { > label {
font-size: 1rem; font-size: 1rem;
padding: 0 0 0 1rem; padding: 0 0 0 1rem;
line-height: 2rem;
> * {
line-height: 1rem;
}
} }
table { table {
width: 100%; width: 100%;
@@ -93,6 +95,17 @@
border: 1px solid $l5r5e-title; border: 1px solid $l5r5e-title;
font-size: 0.85rem; font-size: 0.85rem;
padding: 0.25rem; padding: 0.25rem;
> * {
line-height: 1rem;
}
> ul {
li {
line-height: 2rem;
> * {
line-height: 1rem;
}
}
}
&.done { &.done {
border: 1px solid $l5r5e-earth; border: 1px solid $l5r5e-earth;
box-shadow: 0 1px 5px $l5r5e-earth; box-shadow: 0 1px 5px $l5r5e-earth;
@@ -116,11 +129,6 @@
border: 1px solid rgba(255, 255, 255, 0.5); border: 1px solid rgba(255, 255, 255, 0.5);
margin: 0 0.25rem 1rem; margin: 0 0.25rem 1rem;
} }
> ul {
li {
line-height: 2rem;
}
}
hr { hr {
border-top: 1px solid $l5r5e-black-light; border-top: 1px solid $l5r5e-black-light;
} }

View File

@@ -568,30 +568,66 @@ button {
h3 { h3 {
font-size: 0.85rem; font-size: 0.85rem;
} }
} ul {
} display: flex;
} color: $l5r5e-white;
&.encounter {
// Dialog border-right: 1px solid $l5r5e-white-light;
.dialo { }
.logo-dialog { li {
height: 125px; flex: 1;
.dialog-buttons { cursor: url("../assets/cursors/pointer.webp"), pointer;
button { }
line-height: 1rem;
} }
} .encounter {
.dialog-content { i {
height: 1rem; font-size: 23px;
p { vertical-align: middle;
margin: 0; &:hover {
text-shadow: 0 0 8px $red;
}
}
.active {
color: $l5r5e-maho;
&:hover {
text-shadow: none;
}
}
&-icon {
font-weight: 900;
font-family: "Font Awesome 5 Free";
-moz-osx-font-smoothing: grayscale;
-webkit-font-smoothing: antialiased;
display: inline-block;
font-style: normal;
font-variant: normal;
text-rendering: auto;
line-height: 1;
&-intrigue:before {
content: "\f21b";
}
&-duel:before {
content: "\f506";
}
&-skirmish:before {
content: "\f505";
}
&-mass_battle:before {
content: "\f447";
}
}
} }
} }
} }
} }
// Pause // Pause
#pause { #pause {
img { img {
content: url("../assets/icons/pause.svg"); content: url("../assets/icons/pause.svg");

View File

@@ -1,12 +1,32 @@
{ {
"name": "l5r5e", "name": "l5r5e",
"title": "Legend of the Five Rings (5th Edition)", "title": "Legend of the Five Rings (5th Edition)",
"description": "This is a game system, multilingual in 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>", "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.0.0", "version": "1.1.1",
"minimumCoreVersion": "0.7.9", "minimumCoreVersion": "0.7.9",
"compatibleCoreVersion": "0.7.9", "compatibleCoreVersion": "0.7.9",
"manifestPlusVersion": "1.0.0",
"socket": true, "socket": true,
"author": "Team L5R", "author": "Team L5R",
"authors": [
{
"name": "Vlyan",
"discord": "Vlyan#6771"
},
{
"name": "Mandar",
"discord": "Mandar#3440"
},
{
"name": "Carter"
},
{
"name": "Hrunh"
},
{
"name": "Sasmira"
}
],
"background": "L5R-Header.webp", "background": "L5R-Header.webp",
"scripts": [], "scripts": [],
"esmodules": ["./scripts/main-l5r5e.js"], "esmodules": ["./scripts/main-l5r5e.js"],
@@ -140,5 +160,5 @@
], ],
"url": "https://gitlab.com/teaml5r/l5r5e", "url": "https://gitlab.com/teaml5r/l5r5e",
"manifest": "https://gitlab.com/teaml5r/l5r5e/-/raw/master/system/system.json", "manifest": "https://gitlab.com/teaml5r/l5r5e/-/raw/master/system/system.json",
"download": "https://gitlab.com/teaml5r/l5r5e/-/jobs/artifacts/v1.0.0/raw/l5r5e.zip?job=build" "download": "https://gitlab.com/teaml5r/l5r5e/-/jobs/artifacts/v1.1.1/raw/l5r5e.zip?job=build"
} }

View File

@@ -85,7 +85,8 @@
"max": 1, "max": 1,
"value": 0 "value": 0
}, },
"stance": "void" "stance": "void",
"prepared": true
}, },
"advancement": { "advancement": {
"xp_total": 0, "xp_total": 0,

View File

@@ -2,7 +2,7 @@
<li class="endurance-content"> <li class="endurance-content">
<label class="attribute-label"> <label class="attribute-label">
<strong>{{ localize 'l5r5e.attributes.endurance' }}</strong> <strong>{{ localize 'l5r5e.attributes.endurance' }}</strong>
<input class="centered-input" type="text" name="data.endurance" value="{{data.endurance}}" data-dtype="Number" disabled/> <input class="centered-input" type="number" name="data.endurance" value="{{data.endurance}}" data-dtype="Number" disabled/>
</label> </label>
<label class="attribute-label"> <label class="attribute-label">
<strong>{{ localize 'l5r5e.attributes.fatigue' }}</strong> <strong>{{ localize 'l5r5e.attributes.fatigue' }}</strong>
@@ -13,7 +13,7 @@
<li class="composure-content"> <li class="composure-content">
<label class="attribute-label"> <label class="attribute-label">
<strong>{{ localize 'l5r5e.attributes.composure' }}</strong> <strong>{{ localize 'l5r5e.attributes.composure' }}</strong>
<input class="centered-input" type="text" name="data.composure" value="{{data.composure}}" data-dtype="Number" disabled/> <input class="centered-input" type="number" name="data.composure" value="{{data.composure}}" data-dtype="Number" disabled/>
</label> </label>
<label class="attribute-label"> <label class="attribute-label">
<strong>{{ localize 'l5r5e.attributes.strife' }}</strong> <strong>{{ localize 'l5r5e.attributes.strife' }}</strong>
@@ -24,14 +24,18 @@
<li class="focus-content"> <li class="focus-content">
<label class="attribute-label"> <label class="attribute-label">
<strong>{{ localize 'l5r5e.attributes.focus' }}</strong> <strong>{{ localize 'l5r5e.attributes.focus' }}</strong>
<input class="centered-input" type="text" name="data.focus" value="{{data.focus}}" data-dtype="Number" disabled/> <input class="centered-input" type="number" name="data.focus" value="{{data.focus}}" data-dtype="Number" disabled/>
</label> </label>
<p class="item-description"> {{ localize 'l5r5e.attributes.focustip' }}</p> <p class="item-description"> {{ localize 'l5r5e.attributes.focustip' }}</p>
</li> </li>
<li class="vigilance-content {{#ifCond data.strife.value '>' data.strife.max}}compromised{{/ifCond}}"> <li class="vigilance-content {{#if data.is_compromised}}compromised{{/if}}">
<label class="attribute-label"> <label class="attribute-label">
<strong>{{ localize 'l5r5e.attributes.vigilance' }}</strong> <strong>{{ localize 'l5r5e.attributes.vigilance' }}</strong>
<input class="centered-input" type="text" name="data.vigilance" value="{{data.vigilance}}" data-dtype="Number" disabled/> {{#if data.is_compromised}}
<input class="centered-input" type="number" value="1" disabled/>
{{else}}
<input class="centered-input" type="number" name="data.vigilance" value="{{data.vigilance}}" data-dtype="Number" disabled/>
{{/if}}
</label> </label>
<p class="item-description"> {{ localize 'l5r5e.attributes.vigilancetip' }}</p> <p class="item-description"> {{ localize 'l5r5e.attributes.vigilancetip' }}</p>
</li> </li>
@@ -39,7 +43,7 @@
<label class="attribute-label"> <label class="attribute-label">
<strong>{{ localize 'l5r5e.attributes.voidpoints' }}</strong> <strong>{{ localize 'l5r5e.attributes.voidpoints' }}</strong>
<input class="centered-input select-on-focus" type="number" name="data.void_points.value" value="{{data.void_points.value}}" data-dtype="Number" placeholder="0" min="0" max="{{data.void_points.max}}"/> <input class="centered-input select-on-focus" type="number" name="data.void_points.value" value="{{data.void_points.value}}" data-dtype="Number" placeholder="0" min="0" max="{{data.void_points.max}}"/>
<input class="centered-input" type="text" name="data.void_points.max" value="{{data.void_points.max}}" data-dtype="Number" disabled/> <input class="centered-input" type="number" name="data.void_points.max" value="{{data.void_points.max}}" data-dtype="Number" disabled/>
</label> </label>
</li> </li>
</ul> </ul>

View File

@@ -1,9 +1,14 @@
<fieldset class="initiative initiative-wrapper"> <fieldset class="initiative initiative-wrapper">
<legend class="section-header">{{ localize 'l5r5e.conflict.initiative.title' }}</legend> <legend class="section-header">
<button class="initiative dice-picker" data-skill="sentiment" data-diff="1">{{ localize 'l5r5e.conflict.initiative.intrigue'}}</button> {{ localize 'l5r5e.conflict.initiative.title' }}
<button class="initiative dice-picker" data-skill="meditation" data-diff="1">{{ localize 'l5r5e.conflict.initiative.duel'}}</button> <a class="encounter prepared-control" data-id="{{entity.type}}">
<button class="initiative dice-picker" data-skill="tactics" data-diff="1">{{ localize 'l5r5e.conflict.initiative.skirmish'}}</button> <i class="fa fas prepared-icon prepared-icon-{{data.prepared}} prepared-{{entity.type}}" title="{{localize (localize 'l5r5e.conflict.initiative.prepared_{value}' value=data.prepared)}}"></i>
<button class="initiative dice-picker" data-skill="command" data-diff="1">{{ localize 'l5r5e.conflict.initiative.mass_battle'}}</button> </a>
</legend>
<button class="initiative dice-picker" data-initiative="true" data-skill="sentiment">{{ localize 'l5r5e.conflict.initiative.intrigue'}}</button>
<button class="initiative dice-picker" data-initiative="true" data-skill="meditation">{{ localize 'l5r5e.conflict.initiative.duel'}}</button>
<button class="initiative dice-picker" data-initiative="true" data-skill="tactics">{{ localize 'l5r5e.conflict.initiative.skirmish'}}</button>
<button class="initiative dice-picker" data-initiative="true" data-skill="command">{{ localize 'l5r5e.conflict.initiative.mass_battle'}}</button>
</fieldset> </fieldset>
<fieldset class="stances-content flexrow"> <fieldset class="stances-content flexrow">
<legend class="section-header">{{ localize 'l5r5e.conflict.stance' }}</legend> <legend class="section-header">{{ localize 'l5r5e.conflict.stance' }}</legend>

View File

@@ -2,13 +2,13 @@
<fieldset> <fieldset>
<legend class="text-block-header">{{ localize 'l5r5e.social.title' }}</legend> <legend class="text-block-header">{{ localize 'l5r5e.social.title' }}</legend>
<label class="attribute-label">{{ localize 'l5r5e.social.ninjo' }} <label class="attribute-label">{{ localize 'l5r5e.social.ninjo' }}
<input type="text" name="data.social.ninjo" value="{{data.social.ninjo}}"/> <textarea type="text" name="data.social.ninjo">{{data.social.ninjo}}</textarea>
</label> </label>
<label class="attribute-label">{{ localize 'l5r5e.social.giri' }} <label class="attribute-label">{{ localize 'l5r5e.social.giri' }}
<input type="text" name="data.social.giri" value="{{data.social.giri}}"/> <textarea type="text" name="data.social.giri">{{data.social.giri}}</textarea>
</label> </label>
<label class="attribute-label">{{ localize 'l5r5e.social.titles' }} <label class="attribute-label">{{ localize 'l5r5e.social.titles' }}
<input type="text" name="data.social.titles" value="{{data.social.titles}}"/> <input type="text" name="data.social.titles" value="{{data.social.titles}}" />
</label> </label>
</fieldset> </fieldset>
<fieldset> <fieldset>

View File

@@ -1,34 +1,34 @@
<ul class="rings"> <ul class="rings">
<li id="earth"> <li id="earth">
<label class="attribute-label earth centered-input"> <label class="earth">
<i class="i_earth"></i> <i class="i_earth"></i>
<strong>{{ localizeRing 'earth' }}</strong> <strong>{{ localizeRing 'earth' }}</strong>
<input class="centered-input select-on-focus" type="number" name="data.rings.earth" value="{{data.rings.earth}}" data-dtype="Number" min="1" max="9" placeholder="0"/> <input class="centered-input select-on-focus" type="number" name="data.rings.earth" value="{{data.rings.earth}}" data-dtype="Number" min="1" max="9" placeholder="0"/>
</label> </label>
</li> </li>
<li id="air"> <li id="air">
<label class="attribute-label air centered-input"> <label class="air">
<i class="i_air"></i> <i class="i_air"></i>
<strong>{{ localizeRing 'air' }}</strong> <strong>{{ localizeRing 'air' }}</strong>
<input class="centered-input select-on-focus" type="number" name="data.rings.air" value="{{data.rings.air}}" data-dtype="Number" min="1" max="9" placeholder="0"/> <input class="centered-input select-on-focus" type="number" name="data.rings.air" value="{{data.rings.air}}" data-dtype="Number" min="1" max="9" placeholder="0"/>
</label> </label>
</li> </li>
<li id="water"> <li id="water">
<label class="attribute-label water centered-input"> <label class="water">
<i class="i_water"></i> <i class="i_water"></i>
<strong>{{ localizeRing 'water' }}</strong> <strong>{{ localizeRing 'water' }}</strong>
<input class="centered-input select-on-focus" type="number" name="data.rings.water" value="{{data.rings.water}}" data-dtype="Number" min="1" max="9" placeholder="0"/> <input class="centered-input select-on-focus" type="number" name="data.rings.water" value="{{data.rings.water}}" data-dtype="Number" min="1" max="9" placeholder="0"/>
</label> </label>
</li> </li>
<li id="fire"> <li id="fire">
<label class="attribute-label fire centered-input"> <label class="fire">
<i class="i_fire"></i> <i class="i_fire"></i>
<strong>{{ localizeRing 'fire' }}</strong> <strong>{{ localizeRing 'fire' }}</strong>
<input class="centered-input select-on-focus" type="number" name="data.rings.fire" value="{{data.rings.fire}}" data-dtype="Number" min="1" max="9" placeholder="0"/> <input class="centered-input select-on-focus" type="number" name="data.rings.fire" value="{{data.rings.fire}}" data-dtype="Number" min="1" max="9" placeholder="0"/>
</label> </label>
</li> </li>
<li id="void"> <li id="void">
<label class="attribute-label void centered-input"> <label class="void">
<i class="i_void"></i> <i class="i_void"></i>
<strong>{{ localizeRing 'void' }}</strong> <strong>{{ localizeRing 'void' }}</strong>
<input class="centered-input select-on-focus" type="number" name="data.rings.void" value="{{data.rings.void}}" data-dtype="Number" min="1" max="9" placeholder="0"/> <input class="centered-input select-on-focus" type="number" name="data.rings.void" value="{{data.rings.void}}" data-dtype="Number" min="1" max="9" placeholder="0"/>

View File

@@ -20,7 +20,12 @@
</header> </header>
{{!-- Sheet Body --}} {{!-- Sheet Body --}}
<section class="sheet-body"> <section class="sheet-body">
<article>
{{> 'systems/l5r5e/templates/actors/npc/skill.html' }} {{> 'systems/l5r5e/templates/actors/npc/skill.html' }}
{{#ifCond data.type '==' 'adversary'}}
{{> 'systems/l5r5e/templates/actors/npc/conflict.html' }}
{{/ifCond}}
</article>
<article> <article>
{{> 'systems/l5r5e/templates/actors/npc/narrative.html' }} {{> 'systems/l5r5e/templates/actors/npc/narrative.html' }}
</article> </article>

View File

@@ -2,7 +2,7 @@
<li class="endurance-content"> <li class="endurance-content">
<label class="attribute-label"> <label class="attribute-label">
<strong>{{ localize 'l5r5e.attributes.endurance' }}</strong> <strong>{{ localize 'l5r5e.attributes.endurance' }}</strong>
<input class="centered-input" type="text" name="data.endurance" value="{{data.endurance}}" data-dtype="Number" disabled/> <input class="centered-input" type="number" name="data.endurance" value="{{data.endurance}}" data-dtype="Number" min="0" placeholder="0"/>
</label> </label>
<label class="attribute-label"> <label class="attribute-label">
<strong>{{ localize 'l5r5e.attributes.fatigue' }}</strong> <strong>{{ localize 'l5r5e.attributes.fatigue' }}</strong>
@@ -13,7 +13,7 @@
<li class="composure-content"> <li class="composure-content">
<label class="attribute-label"> <label class="attribute-label">
<strong>{{ localize 'l5r5e.attributes.composure' }}</strong> <strong>{{ localize 'l5r5e.attributes.composure' }}</strong>
<input class="centered-input" type="text" name="data.composure" value="{{data.composure}}" data-dtype="Number" disabled/> <input class="centered-input" type="number" name="data.composure" value="{{data.composure}}" data-dtype="Number" min="0" placeholder="0"/>
</label> </label>
<label class="attribute-label"> <label class="attribute-label">
<strong>{{ localize 'l5r5e.attributes.strife' }}</strong> <strong>{{ localize 'l5r5e.attributes.strife' }}</strong>
@@ -24,14 +24,18 @@
<li class="focus-content"> <li class="focus-content">
<label class="attribute-label"> <label class="attribute-label">
<strong>{{ localize 'l5r5e.attributes.focus' }}</strong> <strong>{{ localize 'l5r5e.attributes.focus' }}</strong>
<input class="centered-input" type="text" name="data.focus" value="{{data.focus}}" data-dtype="Number" disabled/> <input class="centered-input" type="number" name="data.focus" value="{{data.focus}}" data-dtype="Number" min="0" placeholder="0"/>
</label> </label>
<p class="item-description"> {{ localize 'l5r5e.attributes.focustip' }}</p> <p class="item-description"> {{ localize 'l5r5e.attributes.focustip' }}</p>
</li> </li>
<li class="vigilance-content {{#ifCond data.strife.value '>' data.strife.max}}compromised{{/ifCond}}"> <li class="vigilance-content {{#if data.is_compromised}}compromised{{/if}}">
<label class="attribute-label"> <label class="attribute-label">
<strong>{{ localize 'l5r5e.attributes.vigilance' }}</strong> <strong>{{ localize 'l5r5e.attributes.vigilance' }}</strong>
<input class="centered-input" type="text" name="data.vigilance" value="{{data.vigilance}}" data-dtype="Number" disabled/> {{#if data.is_compromised}}
<input class="centered-input" type="number" value="1" disabled/>
{{else}}
<input class="centered-input" type="number" name="data.vigilance" value="{{data.vigilance}}" data-dtype="Number" min="0" placeholder="0"/>
{{/if}}
</label> </label>
<p class="item-description"> {{ localize 'l5r5e.attributes.vigilancetip' }}</p> <p class="item-description"> {{ localize 'l5r5e.attributes.vigilancetip' }}</p>
</li> </li>
@@ -39,7 +43,7 @@
<label class="attribute-label"> <label class="attribute-label">
<strong>{{ localize 'l5r5e.attributes.voidpoints' }}</strong> <strong>{{ localize 'l5r5e.attributes.voidpoints' }}</strong>
<input class="centered-input select-on-focus" type="number" name="data.void_points.value" value="{{data.void_points.value}}" data-dtype="Number" placeholder="0" min="0" max="{{data.void_points.max}}"/> <input class="centered-input select-on-focus" type="number" name="data.void_points.value" value="{{data.void_points.value}}" data-dtype="Number" placeholder="0" min="0" max="{{data.void_points.max}}"/>
<input class="centered-input" type="text" name="data.void_points.max" value="{{data.void_points.max}}" data-dtype="Number" disabled/> <input class="centered-input" type="number" name="data.void_points.max" value="{{data.void_points.max}}" data-dtype="Number" disabled/>
</label> </label>
</li> </li>
</ul> </ul>

View File

@@ -1,6 +1,18 @@
<fieldset class="initiative initiative-wrapper">
<legend class="section-header">
{{ localize 'l5r5e.conflict.initiative.title' }}
<a class="encounter prepared-control" data-id="{{data.type}}">
<i class="fa fas prepared-icon prepared-icon-{{data.prepared}} prepared-{{data.type}}" title="{{localize (localize 'l5r5e.conflict.initiative.prepared_{value}' value=data.prepared)}}"></i>
</a>
</legend>
<button class="initiative dice-picker" data-initiative="true" data-skill="sentiment">{{ localize 'l5r5e.conflict.initiative.intrigue'}}</button>
<button class="initiative dice-picker" data-initiative="true" data-skill="meditation">{{ localize 'l5r5e.conflict.initiative.duel'}}</button>
<button class="initiative dice-picker" data-initiative="true" data-skill="tactics">{{ localize 'l5r5e.conflict.initiative.skirmish'}}</button>
<button class="initiative dice-picker" data-initiative="true" data-skill="command">{{ localize 'l5r5e.conflict.initiative.mass_battle'}}</button>
</fieldset>
<fieldset class="stances-content flexrow"> <fieldset class="stances-content flexrow">
<legend class="section-header">{{ localize 'l5r5e.conflict.stance' }}</legend> <legend class="section-header">{{ localize 'l5r5e.conflict.stance' }}</legend>
<ul> <ul class="item-list">
{{#each data.rings as |ringValue ringId|}} {{#each data.rings as |ringValue ringId|}}
{{> 'systems/l5r5e/templates/actors/character/stance.html' stance=../data.stance ringId=ringId }} {{> 'systems/l5r5e/templates/actors/character/stance.html' stance=../data.stance ringId=ringId }}
{{/each}} {{/each}}

View File

@@ -1,34 +1,34 @@
<ul class="rings"> <ul class="rings">
<li id="earth"> <li id="earth">
<label class="attribute-label earth centered-input"> <label class="earth">
<i class="i_earth"></i> <i class="i_earth"></i>
<strong>{{ localizeRing 'earth' }}</strong> <strong>{{ localizeRing 'earth' }}</strong>
<input class="centered-input select-on-focus" type="number" name="data.rings.earth" value="{{data.rings.earth}}" data-dtype="Number" min="1" max="9" placeholder="0"/> <input class="centered-input select-on-focus" type="number" name="data.rings.earth" value="{{data.rings.earth}}" data-dtype="Number" min="1" max="9" placeholder="0"/>
</label> </label>
</li> </li>
<li id="air"> <li id="air">
<label class="attribute-label air centered-input"> <label class="air">
<i class="i_air"></i> <i class="i_air"></i>
<strong>{{ localizeRing 'air' }}</strong> <strong>{{ localizeRing 'air' }}</strong>
<input class="centered-input select-on-focus" type="number" name="data.rings.air" value="{{data.rings.air}}" data-dtype="Number" min="1" max="9" placeholder="0"/> <input class="centered-input select-on-focus" type="number" name="data.rings.air" value="{{data.rings.air}}" data-dtype="Number" min="1" max="9" placeholder="0"/>
</label> </label>
</li> </li>
<li id="water"> <li id="water">
<label class="attribute-label water centered-input"> <label class="water">
<i class="i_water"></i> <i class="i_water"></i>
<strong>{{ localizeRing 'water' }}</strong> <strong>{{ localizeRing 'water' }}</strong>
<input class="centered-input select-on-focus" type="number" name="data.rings.water" value="{{data.rings.water}}" data-dtype="Number" min="1" max="9" placeholder="0"/> <input class="centered-input select-on-focus" type="number" name="data.rings.water" value="{{data.rings.water}}" data-dtype="Number" min="1" max="9" placeholder="0"/>
</label> </label>
</li> </li>
<li id="fire"> <li id="fire">
<label class="attribute-label fire centered-input"> <label class="fire">
<i class="i_fire"></i> <i class="i_fire"></i>
<strong>{{ localizeRing 'fire' }}</strong> <strong>{{ localizeRing 'fire' }}</strong>
<input class="centered-input select-on-focus" type="number" name="data.rings.fire" value="{{data.rings.fire}}" data-dtype="Number" min="1" max="9" placeholder="0"/> <input class="centered-input select-on-focus" type="number" name="data.rings.fire" value="{{data.rings.fire}}" data-dtype="Number" min="1" max="9" placeholder="0"/>
</label> </label>
</li> </li>
<li id="void"> <li id="void">
<label class="attribute-label void centered-input"> <label class="void">
<i class="i_void"></i> <i class="i_void"></i>
<strong>{{ localizeRing 'void' }}</strong> <strong>{{ localizeRing 'void' }}</strong>
<input class="centered-input select-on-focus" type="number" name="data.rings.void" value="{{data.rings.void}}" data-dtype="Number" min="1" max="9" placeholder="0"/> <input class="centered-input select-on-focus" type="number" name="data.rings.void" value="{{data.rings.void}}" data-dtype="Number" min="1" max="9" placeholder="0"/>

View File

@@ -236,7 +236,7 @@
</td> </td>
<td class="fifty"> <td class="fifty">
{{localize 'l5r5e.twenty_questions.part2.outfit'}} {{localize 'l5r5e.twenty_questions.part2.outfit'}}
{{> 'systems/l5r5e/templates/actors/character/twenty-questions-item.html' itemsList=cache.step3.equipment stepName='step3.equipment' itemType='items' hideDndAt=10 }} {{> 'systems/l5r5e/templates/actors/character/twenty-questions-item.html' itemsList=cache.step3.equipment stepName='step3.equipment' itemType='items' hideDndAt=20 }}
</td> </td>
</tr> </tr>
</table> </table>

View File

@@ -148,10 +148,12 @@
{{!-- Fourth line--}} {{!-- Fourth line--}}
<tr> <tr>
<td> <td>
{{^if difficultyHiddenIsLock}}
<label> <label>
<input type="checkbox" id="diff_hidden" name="difficulty.hidden" value="1" {{checked data.difficulty.hidden}}> <input type="checkbox" id="diff_hidden" name="difficulty.hidden" value="1" {{checked data.difficulty.hidden}}>
{{localize 'l5r5e.dicepicker.difficulty_hidden_label'}} {{localize 'l5r5e.dicepicker.difficulty_hidden_label'}}
</label> </label>
{{/if}}
</td> </td>
<td> <td>
{{#if canUseVoidPoint}} {{#if canUseVoidPoint}}

View File

@@ -0,0 +1,6 @@
<form class="l5r5e gm-tools-dialog" autocomplete="off">
<p class="gm-tools-container">
<a class="difficulty_hidden"><i class="fa fa-eye{{#if data.difficultyHidden}}-slash{{/if}}"></i></a>
<strong class="difficulty">{{data.difficulty}}</strong>
</p>
</form>

View File

@@ -0,0 +1,16 @@
<nav class="encounters flexrow" id="l5r5e_gm_combat_tracker_bar">
<ul class="encounter">
{{#each encounterTypeList}}
<li class="encounter encounter-control" data-id="{{this}}">
<i class="fa fas encounter-icon-{{this}}{{#ifCond this '==' ../encounterType}} active{{/ifCond}}" title="{{localize (localize 'l5r5e.conflict.initiative.{id}' id=this)}}"></i>
</li>
{{/each}}
</ul>
<ul class="prepared">
{{#each prepared as |prepared charType|}}
<li class="encounter prepared-control" data-id="{{charType}}">
<i class="fa fas prepared-icon-{{prepared}} prepared-{{charType}}" title="{{localize (localize 'l5r5e.conflict.initiative.prepared_{value}' value=prepared)}} ({{localize (localize 'l5r5e.character_types.{type}' type=charType)}})"></i>
</li>
{{/each}}
</ul>
</nav>

View File

@@ -7,7 +7,7 @@
</legend> </legend>
<ul class="item-list"> <ul class="item-list">
{{#each actor.items as |item id|}} {{#each actor.items as |item id|}}
{{#ifCond item.type '==' 'armor'}} {{#ifCond (ifCond item.type '==' 'armor') '&&' (ifCond item.data.equipped '==' true)}}
{{> 'systems/l5r5e/templates/items/armor/armor-entry.html' item=item id=id editable=../editable }} {{> 'systems/l5r5e/templates/items/armor/armor-entry.html' item=item id=id editable=../editable }}
{{/ifCond}} {{/ifCond}}
{{/each}} {{/each}}

View File

@@ -3,8 +3,9 @@
<li class="item-img"><img src="{{item.img}}" title="{{item.name}}" width="32px" height="32px"/></li> <li class="item-img"><img src="{{item.img}}" title="{{item.name}}" width="32px" height="32px"/></li>
<li class="item-name">{{ item.name }} <sub>x{{ item.data.quantity }}</sub></li> <li class="item-name">{{ item.name }} <sub>x{{ item.data.quantity }}</sub></li>
{{#if editable}} {{#if editable}}
<li data-item-id="{{item._id}}" class="item-edit" title="{{localize 'l5r5e.global.edit'}}"><i class="fas fa-edit"></i></li> <li data-item-id="{{item._id}}" data-type="equipped" class="item-equip equip-readied-control" title="{{localize 'l5r5e.armors.equipped'}}"><i class="fas {{#if item.data.equipped}}fa-tshirt{{else}}fa-weight-hanging{{/if}}"></i></li>
<li data-item-id="{{item._id}}" class="item-delete" title="{{localize 'l5r5e.global.delete'}}"><i class="fas fa-trash"></i></li> <li data-item-id="{{item._id}}" class="item-edit" title="{{localize 'l5r5e.global.edit'}}"><i class="fas fa-edit"></i></li>
<li data-item-id="{{item._id}}" class="item-delete" title="{{localize 'l5r5e.global.delete'}}"><i class="fas fa-trash"></i></li>
{{/if}} {{/if}}
</ul> </ul>
<ul class="item-properties"> <ul class="item-properties">
@@ -13,6 +14,6 @@
{{/each}} {{/each}}
</ul> </ul>
{{#if item.data.description}} {{#if item.data.description}}
<div class="item-description item-description-{{item._id}}">{{{ item.data.description }}}</div> <div class="item-description item-description-{{item._id}}">{{{ item.data.description }}}</div>
{{/if}} {{/if}}
</li> </li>

View File

@@ -7,7 +7,7 @@
</legend> </legend>
<ul class="item-list"> <ul class="item-list">
{{#each actor.items as |item id|}} {{#each actor.items as |item id|}}
{{#ifCond item.type '==' 'item'}} {{#ifCond '["item", "armor", "weapon"]' 'includes' item.type}}
{{> 'systems/l5r5e/templates/items/item/item-entry.html' item=item id=id editable=../editable }} {{> 'systems/l5r5e/templates/items/item/item-entry.html' item=item id=id editable=../editable }}
{{/ifCond}} {{/ifCond}}
{{/each}} {{/each}}

View File

@@ -13,11 +13,14 @@
{{/if}} {{/if}}
</ul> </ul>
<ul class="item-properties"> <ul class="item-properties">
<li class="equip-readied-control" data-item-id="{{item._id}}" data-type="readied">
<i class="i_readied fa{{^if item.data.readied}}r{{/if}} fa-check-circle" title="{{#if item.data.readied}}{{localize 'l5r5e.weapons.readied'}}{{else}}{{localize 'l5r5e.weapons.sheathed'}}{{/if}}"></i>
</li>
{{#each item.data.properties as |property id|}} {{#each item.data.properties as |property id|}}
<li>{{{ property.name }}}</li> <li>{{{ property.name }}}</li>
{{/each}} {{/each}}
</ul> </ul>
{{#if item.data.description}} {{#if item.data.description}}
<div class="item-description item-description-{{item._id}}">{{{ item.data.description }}}</div> <div class="item-description item-description-{{item._id}}">{{{ item.data.description }}}</div>
{{/if}} {{/if}}
</li> </li>

View File

@@ -7,7 +7,7 @@
</legend> </legend>
<ul class="item-list"> <ul class="item-list">
{{#each actor.items as |item id|}} {{#each actor.items as |item id|}}
{{#ifCond item.type '==' 'weapon'}} {{#ifCond (ifCond item.type '==' 'weapon') '&&' (ifCond item.data.equipped '==' true)}}
{{> 'systems/l5r5e/templates/items/weapon/weapon-entry.html' item=item id=id editable=../editable }} {{> 'systems/l5r5e/templates/items/weapon/weapon-entry.html' item=item id=id editable=../editable }}
{{/ifCond}} {{/ifCond}}
{{/each}} {{/each}}