Compare commits

...

42 Commits

Author SHA1 Message Date
4061371945 Parse critical tables 2024-10-20 18:21:19 +02:00
973d8733b2 Sync with latest fixes 2024-09-30 13:41:44 +02:00
8cb2969d70 First version with weapons 2024-08-23 11:45:23 +02:00
45ee08e6c2 Import RMFRP tables + properly rename all files 2024-08-15 22:52:36 +02:00
fe36edfeff Import RMFRP tables + properly rename all files 2024-08-15 22:25:07 +02:00
aad90144fe Better import and various stuff 2024-08-10 09:48:43 +02:00
2b1da44f3a Gestion de l'import skill/categories 2024-08-10 00:26:22 +02:00
420f912c8c Gestion de l'import skill/categories 2024-08-10 00:26:05 +02:00
6cfedca162 Gestion de l'import skill/categories 2024-08-10 00:24:15 +02:00
de884cbd22 Gestion de l'import skill/categories 2024-08-10 00:15:44 +02:00
8b37e16915 Gestion de l'import skill/categories 2024-08-09 23:58:38 +02:00
46d991fb65 Fix compendiums 2024-08-09 08:47:23 +02:00
5ca0362773 Fix compendiums 2024-08-09 08:44:14 +02:00
f777131374 Fix compendiums 2024-08-08 23:16:50 +02:00
c11f7d23a8 Add game system for skills 2024-08-08 05:04:53 +02:00
98e6b70b1b Add game system for skills 2024-08-07 23:08:58 +02:00
6597334682 Add game system for skills 2024-08-07 23:08:46 +02:00
534fcb04fb Manage game systems 2024-08-07 17:27:08 +02:00
8be95c20bd Add new rank option 2024-08-04 20:44:34 +02:00
cba4394a37 Rework skill/skill categ links 2024-08-03 16:41:04 +02:00
1f2558b680 Skills below Skills categories + skills rollable 2024-08-02 17:07:02 +02:00
e25c51a570 Rework roll window 2024-07-29 09:28:42 +02:00
3ba8fdd641 Actualiser README.md 2024-07-27 18:20:30 +02:00
41a9769945 Merge dice-roller branch 2024-07-26 18:31:41 +02:00
895ab67602 Merge dice-roller branch 2024-07-26 14:21:23 +02:00
dc4a58a5c6 Merge dice-roller branch 2024-07-26 14:19:40 +02:00
af8b2eeaba Merge dice-roller branch 2024-07-26 14:19:02 +02:00
803604c1fe Merge dice-roller branch 2024-07-26 14:15:51 +02:00
193c097882 v12 support 2024-07-26 12:51:32 +02:00
3aab5959fb Rework folder organization 2024-07-26 09:22:11 +02:00
575bb63d2f Rework folder organization 2024-07-26 09:20:48 +02:00
Cynicide
03fffa2f19
Merge pull request #7 from Cynicide/added-skill-category-import
Added system to skill category import
2022-10-25 22:05:07 +11:00
Anthony Murphy
53c5b2ee6e Added system to skill category import
Initial Exhaustion Calculations
Fix for Skill Categories with two stats
Added Racial Bonuses for Resistances
2022-10-25 22:03:59 +11:00
Cynicide
8bc535cf35
Merge pull request #6 from Cynicide/added-spells-to-player-sheet
Added spells to player sheet
2022-09-23 00:52:51 +10:00
Anthony Murphy
8d01c8f172 removed old readme 2022-09-23 00:52:21 +10:00
Anthony Murphy
5fc1484484 Added spells and documentation 2022-09-23 00:51:21 +10:00
Cynicide
5f29bf1787
Merge pull request #5 from Cynicide/new-ranks-early-inventory
Add New Ranks chceckboxes
2022-09-18 21:31:40 +10:00
Anthony Murphy
cab5aa07f3 Add New Ranks chceckboxes
Fix Updates for Skill/Skill Category Totals
Inventory Implementation
2022-09-18 21:31:15 +10:00
Cynicide
cfc645d888
Merge pull request #4 from Cynicide/add-skill-designations
Add skill designations
2022-09-14 20:01:17 +10:00
Anthony Murphy
44996e945c Add skill designations
Fix drag and drop for skills and skill categories named the same
Set sane default values for attributes
Removed deprecated no grid sheets
2022-09-14 20:00:23 +10:00
Cynicide
08fd1f0fd6
Merge pull request #3 from Cynicide/Calculate-Skill-Totals
Calculate skill total bonuses
2022-09-12 06:25:03 +10:00
Anthony Murphy
d5d5785383 Calculate skill total bonuses 2022-09-12 06:22:55 +10:00
219 changed files with 164580 additions and 2247 deletions

View File

@ -1,20 +1,30 @@
# Rolemaster Standard System for Foundry VTT
## Intro
## Introduction
This is an in development implementation of the Rolemaster Standard System for FoundryVTT. All rights to the system remain property of Iron Crown Enterprises (http://ironcrown.com/). This system will not include any of the book content and aims to provide only what is on the reproducable character sheet. If you need access to the Rolemaster Standard System please purchase a copy of the PDF's via Drive Thru RPG (https://www.drivethrurpg.com/browse/pub/461/Iron-Crown-Enterprises).
This repo is an independant fork from https://github.com/Cynicide/RMSS-FoundryVTT from Cynicide, in order to implement a fully playable Rolemaster FRP system in FoundryVTT.
Early project goals include:
All rights to the system remain property of Iron Crown Enterprises (http://ironcrown.com/). This system will not include any of the book content and aims to provide only what is on the character sheet.
## How to Use
Download the latest release from this repository and then extract the rmss folder. Drag it into the systems folder of your FoundryVTT Data Directory. More detailed instructions can be found [here](docs/INSTALL.md) in the docs directory (to be updated).
Further information on how the system works can be found [here](docs/USAGE.md) (to be updated)
## Goals/ToDo
Project goals include:
- A functionaing character sheet that automates some of the basic maths.
- A dice roller that allows you to perform the most common rolls in the system.
- A basic combat tracker
I maintain a public Trello board here where I log my work items: https://trello.com/b/JkXd5EGx/rmss-for-foundryvtt-features
## Credits
This system is based on:
- the Foundry VTT Boilerplate system by XXX
- The Foundry VTT Boilerplate system by Asacolips. (https://gitlab.com/asacolips-projects/foundry-mods/boilerplate)
- The video tutorials by Cédric Hauteville you can watch them here: https://www.youtube.com/playlist?list=PLFV9z59nkHDccUbRXVt623UdloPTclIrz
- The Rolemaster FRP is derivated from the RMSS system from Cynicide, available here https://github.com/Cynicide/RMSS-FoundryVTT
Icons have been provided by https://game-icons.net
Icons used in this system have been sourced from https://game-icons.net
This system uses less for CSS you can see a good installation guide for VSCode at https://code.visualstudio.com/docs/languages/css#_transpiling-sass-and-less-into-css
This system uses less for CSS. If you change the CSS and need to rebuild it you can see a good installation guide for Less on VSCode at https://code.visualstudio.com/docs/languages/css#_transpiling-sass-and-less-into-css

View File

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

@ -0,0 +1 @@
<svg style="height: 512px; width: 512px;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><g class="" style="" transform="translate(0,0)"><path d="M488 348.78h-70.24l-15.1 87.44-48.78-87.44H169v-50h190v-157h129zm-145-273v207H158.13l-48.79 87.47-15.11-87.47H24v-207zM136.724 215.324c0-10.139-12.257-15.214-19.425-8.046-7.168 7.168-2.093 19.426 8.046 19.426 6.285 0 11.38-5.095 11.38-11.38zm60.945 0c-.068-10.12-12.32-15.122-19.452-7.943-7.131 7.18-2.047 19.399 8.073 19.399 6.314 0 11.422-5.141 11.38-11.456zm60.945 0c0-10.139-12.257-15.214-19.425-8.046-7.169 7.168-2.093 19.426 8.046 19.426 6.284 0 11.38-5.095 11.38-11.38z" fill="#fff" fill-opacity="1"></path></g></svg>

After

Width:  |  Height:  |  Size: 680 B

View File

Before

Width:  |  Height:  |  Size: 996 B

After

Width:  |  Height:  |  Size: 996 B

View File

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB

View File

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB

View File

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
assets/fonts/PragRoman.ttf Normal file

Binary file not shown.

Binary file not shown.

68
assets/icons/R.svg Normal file
View File

@ -0,0 +1,68 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="10mm"
height="10mm"
viewBox="0 0 10 10"
version="1.1"
id="svg8"
sodipodi:docname="R.svg"
inkscape:version="0.92.3 (2405546, 2018-03-11)">
<defs
id="defs2" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="11.2"
inkscape:cx="22.566968"
inkscape:cy="24.072623"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1920"
inkscape:window-height="1017"
inkscape:window-x="1672"
inkscape:window-y="-8"
inkscape:window-maximized="1" />
<metadata
id="metadata5">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-287)">
<g
aria-label="R"
transform="matrix(0.26458333,0,0,0.26458333,-39.157593,262.07008)"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="flowRoot4539">
<path
d="m 161.01484,115.06095 q 1.08,0 2.28,0.92 1.24,0.88 2.4,2.08 1.2,1.2 2.28,2.44 1.08,1.2 1.92,1.88 2.08,1.68 4.16,3.32 2.08,1.6 4.2,3.24 0.56,0.44 1.04,0.8 0.48,0.4 0.96,0.68 0.52,0.28 1.08,0.44 0.6,0.16 1.36,0.16 0.56,0 0.68,-0.32 0.12,-0.28 0.12,-0.72 0,-0.8 -0.64,-1.8 -0.6,-1.04 -1.48,-2.04 -0.84,-1.04 -1.72,-1.96 -0.88,-0.92 -1.4,-1.52 -1.88,-2.2 -3.84,-4.4 -1.92,-2.2 -4,-4.24 0,-0.24 0,-0.4 0.04,-0.2 0.28,-0.36 1.32,-0.88 2.88,-1.68 1.56,-0.8 2.88,-1.8 1.32,-1.04 2.2,-2.4 0.92,-1.36 0.92,-3.28 0,-2.08 -0.72,-3.52 -0.72,-1.480002 -1.92,-2.440002 -1.2,-1 -2.76,-1.56 -1.56,-0.6 -3.28,-0.88 -1.72,-0.32 -3.48,-0.4 -1.72,-0.08 -3.28,-0.08 h -3.64 q -1.16,0 -2.36,0.12 -1.2,0.12 -2.36,0.12 -0.56,0 -1.44,-0.04 -0.88,-0.04 -1.72,0.08 -0.84,0.12 -1.44,0.52 -0.6,0.4 -0.6,1.28 0,0.56 0.48,0.84 0.48,0.24 1.12,0.4 0.64,0.12 1.28,0.24 0.68,0.12 1.04,0.36 -0.12,2.440002 -0.04,4.880002 0.08,2.44 0.2,4.92 0.12,2.44 0.24,4.92 0.12,2.44 0.12,4.88 0,1.8 -0.16,3.52 -0.12,1.72 -0.12,3.52 -0.4,0.48 -1.16,0.72 -0.72,0.2 -1.48,0.44 -0.72,0.2 -1.28,0.6 -0.52,0.36 -0.52,1.12 0,0.32 0.28,0.48 0.32,0.16 0.52,0.32 1.4,-0.04 2.72,-0.28 1.36,-0.24 2.76,-0.24 2.16,0 4.32,0.12 2.16,0.12 4.32,0.12 h 1.8 q 0.32,-0.16 0.56,-0.4 0.24,-0.24 0.24,-0.64 0,-0.72 -0.8,-1.08 -0.8,-0.4 -1.88,-0.6 -1.08,-0.2 -2.16,-0.28 -1.04,-0.08 -1.52,-0.2 -0.12,-0.04 -0.44,-0.12 -0.28,-0.12 -0.28,-0.32 v -10.2 z m 0,-2.08 q 0,-3.48 0.24,-6.92 0.28,-3.44 0.28,-6.920002 l 0.28,-0.52 0.24,-0.28 q 0.68,-0.04 1.28,-0.16 0.64,-0.12 1.32,-0.12 h 0.28 q 1.68,0.24 3.04,0.56 1.36,0.32 2.32,1 0.96,0.680002 1.44,1.880002 0.52,1.16 0.52,3.12 0,1.92 -0.36,3.2 -0.36,1.24 -1.04,2.04 -0.64,0.8 -1.56,1.28 -0.92,0.44 -2.04,0.76 -1.08,0.28 -2.36,0.6 -1.24,0.28 -2.56,0.76 -0.12,0 -0.36,0 -0.2,0 -0.44,0 -0.2,-0.04 -0.36,-0.08 -0.16,-0.08 -0.16,-0.2 z"
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:40px;font-family:PragRoman;-inkscape-font-specification:'PragRoman, Medium';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start"
id="path4571"
inkscape:connector-curvature="0" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.2 KiB

View File

@ -0,0 +1,354 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" id="svg2" sodipodi:docname="_svgclean2.svg" viewBox="0 0 1015.8 687.24" version="1.1" inkscape:version="0.48.3.1 r9886">
<sodipodi:namedview id="namedview4" fit-margin-left="0" inkscape:zoom="0.75585938" borderopacity="1" inkscape:current-layer="svg2" inkscape:cx="600.99803" inkscape:guide-bbox="true" inkscape:window-maximized="0" showgrid="false" fit-margin-right="0" inkscape:snap-global="false" showguides="true" bordercolor="#666666" inkscape:window-x="0" guidetolerance="10" objecttolerance="10" inkscape:window-y="0" fit-margin-bottom="0" inkscape:window-width="512" inkscape:pageopacity="0" inkscape:pageshadow="2" pagecolor="#ffffff" gridtolerance="10" inkscape:cy="-21.199467" inkscape:window-height="452" fit-margin-top="0">
<sodipodi:guide id="guide3103" position="629.48057,1441.0961" orientation="1,0"/>
<sodipodi:guide id="guide3111" position="-942.56933,2326.5579" orientation="0,1"/>
<sodipodi:guide id="guide3113" position="-402.76913,1796.2278" orientation="0,1"/>
<sodipodi:guide id="guide3115" position="520.57347,2132.4192" orientation="1,0"/>
<sodipodi:guide id="guide3117" position="1817.9882,1403.2154" orientation="1,0"/>
<sodipodi:guide id="guide3133" position="449.54717,1138.0503" orientation="0,1"/>
<sodipodi:guide id="guide3135" position="501.63317,754.50797" orientation="0,1"/>
<sodipodi:guide id="guide3137" position="747.85787,228.91293" orientation="0,1"/>
<sodipodi:guide id="guide3263" position="261.91917,1110.2316" orientation="0,1"/>
<sodipodi:guide id="guide3265" position="256.00037,898.92817" orientation="0,1"/>
<sodipodi:guide id="guide3267" position="325.02107,1065.5962" orientation="0,1"/>
<sodipodi:guide id="guide3269" position="363.72367,1167.6446" orientation="0,1"/>
<sodipodi:guide id="guide3271" position="362.53987,840.33147" orientation="0,1"/>
<sodipodi:guide id="guide3273" position="31.675468,1096.0264" orientation="1,0"/>
<sodipodi:guide id="guide3275" position="453.34934,2.6762529" orientation="1,0"/>
<sodipodi:guide id="guide3277" position="257.77597,1086.5562" orientation="1,0"/>
<sodipodi:guide id="guide3279" position="112.17197,1149.888" orientation="1,0"/>
<sodipodi:guide id="guide3281" position="556.88497,1225.4735" orientation="1,0"/>
<sodipodi:guide id="guide3297" position="271.86817,863.02927" orientation="0,1"/>
<sodipodi:guide id="guide3308" position="390.35847,1003.1002" orientation="0,1"/>
<sodipodi:guide id="guide3310" position="352.47777,1062.2889" orientation="0,1"/>
<sodipodi:guide id="guide3319" position="161.79567,945.06047" orientation="0,1"/>
</sodipodi:namedview>
<flowRoot id="flowRoot3321" xml:space="preserve" style="letter-spacing:0px;color:#000000;word-spacing:0px;line-height:125%;fill:#000000" transform="translate(1784.8 -879.48)">
<flowRegion id="flowRegion3323">
<rect id="rect3325" y="-1082" width="1098.5" x="-634.5" height="454.57"/>
</flowRegion>
<flowPara id="flowPara3327"/>
</flowRoot>
<flowRoot id="flowRoot3329-1-2-8-7-9-8" xml:space="preserve" style="letter-spacing:0px;color:#000000;word-spacing:0px;line-height:125%;fill:#000000" transform="translate(2745 74.666)">
<flowRegion id="flowRegion3331-4-2-5-9-3-4">
<rect id="rect3333-2-1-7-5-1-1" y="-1200.4" width="288.84" x="-691.32" height="250.96"/>
</flowRegion>
<flowPara id="flowPara3611-9-4" style="font-size:220px;font-weight:bold">Hit</flowPara>
</flowRoot>
<g id="g3579" transform="matrix(.38287 0 0 .38287 239.73 585.89)">
<path id="path3007" d="m-565.54-286.65 6.1004-89.981 150.68-85.405 155.86 91.506 0.91503 95.166-158.91 83.575-155.25-86.93z" style="stroke:#000000;stroke-width:5.8303;fill:none" inkscape:connector-curvature="0"/>
<path id="path3009" d="m-256.96-274.7-53.92 21.137-102.23 48.744-106.55-51.763 110-203.17 100.94 203.6" style="stroke:#000000;stroke-width:2.9152;fill:none" inkscape:connector-curvature="0"/>
<path id="path3017" d="m-565.82-280.74 46.587 23.725" style="stroke:#000000;stroke-width:2.9152;fill:none" inkscape:connector-curvature="0"/>
</g>
<g id="g3584" transform="matrix(.35906 0 0 .35906 227.8 591.51)">
<g id="g3034" transform="translate(-1094.9 127.23)">
<path id="path2989" sodipodi:nodetypes="cccccc" style="stroke:#000000;stroke-width:6;fill:none" inkscape:connector-curvature="0" d="m1176.4-341.82-229.98-18.579 2.0085-260.61 240.52 14.562 15.566 68.29z"/>
<path id="path2991" sodipodi:nodetypes="ccccc" style="stroke:#000000;stroke-width:2;fill:none" inkscape:connector-curvature="0" d="m947.44-360.91 9.5406-27.617 95.405-12.553 58.248-99.925 92.895-36.154"/>
<path id="path2993" style="stroke:#000000;stroke-width:2;fill:none" inkscape:connector-curvature="0" d="m1112.1-501.5-158.63-119.51"/>
<path id="path2995" style="stroke:#000000;stroke-width:2;fill:none" inkscape:connector-curvature="0" d="m956.48-387.02-5.5235-231.48"/>
<path id="path2997" style="stroke:#000000;stroke-width:2;fill:none" inkscape:connector-curvature="0" d="m1053.4-401.08 123.52 58.248"/>
</g>
</g>
<g id="g3592" transform="matrix(.34290 0 0 .34290 201.53 549.71)">
<g id="g3041" transform="translate(-837.05 478.79)">
<path id="path2999" style="stroke:#000000;stroke-width:10;fill:none" inkscape:connector-curvature="0" d="m310.86-215.78 32.639-179.76 181.77-94.401 160.68 138.59-22.596 178.26-185.79 90.384z"/>
<path id="path3001" style="stroke:#000000;stroke-width:2;fill:none" inkscape:connector-curvature="0" d="m313.37-215.78 164.2 24.102 182.78 15.064"/>
<path id="path3003" style="stroke:#000000;stroke-width:2;fill:none" inkscape:connector-curvature="0" d="m476.06-82.71 4.0171-108.96-92.393-200.35 230.48 25.609-137.58 175.24"/>
<path id="path3005" sodipodi:nodetypes="ccccc" style="stroke:#000000;stroke-width:2;fill:none" inkscape:connector-curvature="0" d="m315.38-217.28 72.307-175.75 138.59-92.393 91.388 118 44.69 188.3"/>
<path id="path3007-1" style="stroke:#000000;stroke-width:2;fill:none" inkscape:connector-curvature="0" d="m345-394.54 46.196 2.0085"/>
<path id="path3009-7" style="stroke:#000000;stroke-width:2;fill:none" inkscape:connector-curvature="0" d="m616.66-367.92 69.294 19.081"/>
</g>
</g>
<g id="g3242" transform="matrix(.25983 0 0 .25983 477.3 823.96)">
<g id="g3210" transform="matrix(.91589 0 0 .91589 -381.67 -74.793)">
<path id="path3172" sodipodi:rx="31.808037" sodipodi:ry="31.808037" style="stroke:#000000;stroke-width:16;fill:#000000" sodipodi:type="arc" d="m-1044.6-963.58c0 17.567-14.241 31.808-31.808 31.808s-31.808-14.241-31.808-31.808 14.241-31.808 31.808-31.808 31.808 14.241 31.808 31.808z" transform="translate(336.5 -20.089)" sodipodi:cy="-963.58374" sodipodi:cx="-1076.4509"/>
<path id="path3172-5" sodipodi:rx="31.808037" sodipodi:ry="31.808037" style="stroke:#000000;stroke-width:16;fill:#000000" sodipodi:type="arc" d="m-1044.6-963.58c0 17.567-14.241 31.808-31.808 31.808s-31.808-14.241-31.808-31.808 14.241-31.808 31.808-31.808 31.808 14.241 31.808 31.808z" transform="translate(336.5 111.33)" sodipodi:cy="-963.58374" sodipodi:cx="-1076.4509"/>
<path id="path3172-5-5" sodipodi:rx="31.808037" sodipodi:ry="31.808037" style="stroke:#000000;stroke-width:16;fill:#000000" sodipodi:type="arc" d="m-1044.6-963.58c0 17.567-14.241 31.808-31.808 31.808s-31.808-14.241-31.808-31.808 14.241-31.808 31.808-31.808 31.808 14.241 31.808 31.808z" transform="translate(336.5 242.75)" sodipodi:cy="-963.58374" sodipodi:cx="-1076.4509"/>
</g>
<g id="g3210-1" transform="matrix(.91589 0 0 .91589 -192.21 -74.793)">
<path id="path3172-7" sodipodi:rx="31.808037" sodipodi:ry="31.808037" style="stroke:#000000;stroke-width:16;fill:#000000" sodipodi:type="arc" d="m-1044.6-963.58c0 17.567-14.241 31.808-31.808 31.808s-31.808-14.241-31.808-31.808 14.241-31.808 31.808-31.808 31.808 14.241 31.808 31.808z" transform="translate(336.5 -20.089)" sodipodi:cy="-963.58374" sodipodi:cx="-1076.4509"/>
<path id="path3172-5-1" sodipodi:rx="31.808037" sodipodi:ry="31.808037" style="stroke:#000000;stroke-width:16;fill:#000000" sodipodi:type="arc" d="m-1044.6-963.58c0 17.567-14.241 31.808-31.808 31.808s-31.808-14.241-31.808-31.808 14.241-31.808 31.808-31.808 31.808 14.241 31.808 31.808z" transform="translate(336.5 111.33)" sodipodi:cy="-963.58374" sodipodi:cx="-1076.4509"/>
<path id="path3172-5-5-1" sodipodi:rx="31.808037" sodipodi:ry="31.808037" style="stroke:#000000;stroke-width:16;fill:#000000" sodipodi:type="arc" d="m-1044.6-963.58c0 17.567-14.241 31.808-31.808 31.808s-31.808-14.241-31.808-31.808 14.241-31.808 31.808-31.808 31.808 14.241 31.808 31.808z" transform="translate(336.5 242.75)" sodipodi:cy="-963.58374" sodipodi:cx="-1076.4509"/>
</g>
</g>
<path id="path3073" style="stroke:#000000;stroke-width:3.2246;fill:#ff0000" inkscape:connector-curvature="0" d="m1.6123 100.14 4.0557 3.8171h112.37l2.5592-4.4327-55.283-97.914h-4.5329z"/>
<flowRoot id="flowRoot3329" xml:space="preserve" style="letter-spacing:0px;color:#000000;word-spacing:0px;line-height:125%;fill:#000000" transform="matrix(.25983 0 0 .25983 588.84 503.3)">
<flowRegion id="flowRegion3331">
<rect id="rect3333" y="-1096.2" width="421.42" x="-643.97" height="303.05"/>
</flowRegion>
<flowPara id="flowPara3391" style="font-size:220px;font-weight:bold">D4</flowPara>
</flowRoot>
<g id="g3129" transform="matrix(.19571 0 0 .19571 523.21 201.56)">
<path id="path3073-2" d="m-2354.9-392.57-296.96 338.75-1.0158-1.2344c100.54 117.51 199.33 237.47 298.62 356.38l3.2576-0.0829c98.3-117.58 189.88-243.49 288.16-360.29l-288.62-333.37z" sodipodi:nodetypes="cccccccc" style="stroke:#000000;stroke-width:16;fill:#ff0000" inkscape:connector-curvature="0"/>
<path id="path3105" d="m-2650.5-53.343 587.74-4.7351" style="stroke:#000000;stroke-width:6;fill:#ff0000" inkscape:connector-curvature="0"/>
</g>
<flowRoot id="flowRoot3329-5" xml:space="preserve" style="letter-spacing:0px;color:#000000;word-spacing:0px;line-height:125%;fill:#000000" transform="matrix(.25983 0 0 .25983 762.98 504.82)">
<flowRegion id="flowRegion3331-2">
<rect id="rect3333-7" y="-1096.2" width="279.37" x="-643.97" height="222.55"/>
</flowRegion>
<flowPara id="flowPara3337-6" style="font-size:200px;font-weight:bold">D8</flowPara>
</flowRoot>
<rect id="rect3075" style="stroke:#000000;stroke-width:3.1257;fill:#ff0000" rx="6.3636" ry="9.4969" height="95.104" width="91.404" y="10.349" x="167.39"/>
<flowRoot id="flowRoot3329-1" xml:space="preserve" style="letter-spacing:0px;color:#000000;word-spacing:0px;line-height:125%;fill:#000000" transform="matrix(.25983 0 0 .25983 675.87 501.87)">
<flowRegion id="flowRegion3331-4">
<rect id="rect3333-2" y="-1096.2" width="312.52" x="-643.97" height="227.28"/>
</flowRegion>
<flowPara id="flowPara3391-3" style="font-size:220px;font-weight:bold">D6</flowPara>
</flowRoot>
<g id="g3028" style="fill:#ff0000" transform="matrix(.18846 0 0 .18846 58.843 93.476)">
<path id="path2999-4" d="m531.52 523.73 19.011-70.352 277.45-258.73h9.4784l282.8 263.72 23.945 90.327-310.5 292.66-8.8497-0.47531-301.66-290.1z" sodipodi:nodetypes="cccccccccc" style="stroke:#000000;stroke-width:16;fill:#ff0000" inkscape:connector-curvature="0"/>
<path id="path3001-0" d="m519.04 547.65 111.3-61.37 199.64-291.63 198.72 300.99-200.72 95.89-199.72-107.33" sodipodi:nodetypes="cccccc" style="stroke:#000000;stroke-width:6;fill:#ff0000" inkscape:connector-curvature="0"/>
<path id="path3003-9" d="m1028.7 493.56 114.42 54.092" style="stroke:#000000;stroke-width:6;fill:#ff0000" inkscape:connector-curvature="0"/>
<path id="path3005-4" d="m828.72 591.66-0.73554 250.68" sodipodi:nodetypes="cc" style="stroke:#000000;stroke-width:5.6871;fill:#ff0000" inkscape:connector-curvature="0"/>
</g>
<flowRoot id="flowRoot3329-1-2" xml:space="preserve" style="letter-spacing:0px;color:#000000;word-spacing:0px;line-height:125%;fill:#000000" transform="matrix(.25983 0 0 .25983 846.66 499.81)">
<flowRegion id="flowRegion3331-4-2">
<rect id="rect3333-2-1" y="-1096.2" width="411.95" x="-643.97" height="250.96"/>
</flowRegion>
<flowPara id="flowPara3391-3-6" style="font-size:220px;font-weight:bold">D10</flowPara>
</flowRoot>
<path id="path3283" sodipodi:nodetypes="ccccccccccc" style="stroke:#000000;stroke-width:4.9521;fill:#ff0000" inkscape:connector-curvature="0" d="m66.604 384.13 33.97-8.3455 23.883-36.237-2.749-31.304-22.247-26.861-32.307-6.8007-34.44 7.5108-21.433 27.662-3.1143 30.043 21.983 35.539z"/>
<path id="path3285" sodipodi:nodetypes="cccccc" style="stroke:#000000;stroke-width:1.7613;fill:#ff0000" inkscape:connector-curvature="0" d="m33.765 323.86 10.228 36.563 43.896 0.16485 10.249-36.599-30.919-23.74z"/>
<path id="path3287" style="stroke:#000000;stroke-width:1.857;fill:#ff0000" inkscape:connector-curvature="0" d="m67.154 274.95-0.18318 25.83"/>
<path id="path3289" sodipodi:nodetypes="cc" style="stroke:#000000;stroke-width:1.857;fill:#ff0000" inkscape:connector-curvature="0" d="m34.287 325.37-24.377-15.72"/>
<path id="path3291" sodipodi:nodetypes="cc" style="stroke:#000000;stroke-width:1.857;fill:#ff0000" inkscape:connector-curvature="0" d="m44.233 360.16-14.45 16.64"/>
<path id="path3293" sodipodi:nodetypes="cc" style="stroke:#000000;stroke-width:1.857;fill:#ff0000" inkscape:connector-curvature="0" d="m87.683 360.71 13.267 15.263"/>
<path id="path3295" sodipodi:nodetypes="cc" style="stroke:#000000;stroke-width:1.857;fill:#ff0000" inkscape:connector-curvature="0" d="m98.251 324.45 22.939-15.93"/>
<flowRoot id="flowRoot3329-1-2-8" xml:space="preserve" style="letter-spacing:0px;color:#000000;word-spacing:0px;line-height:125%;fill:#000000" transform="matrix(.25983 0 0 .25983 966.57 498.37)">
<flowRegion id="flowRegion3331-4-2-5">
<rect id="rect3333-2-1-7" y="-1096.2" width="411.95" x="-643.97" height="250.96"/>
</flowRegion>
<flowPara id="flowPara3391-3-6-6" style="font-size:220px;font-weight:bold">D12</flowPara>
</flowRoot>
<g id="g3162" transform="matrix(.25983 0 0 .25983 463.76 280.15)">
<path id="path3007-8" d="m-1160.8 71.357 208.07-122.82 208.03 122.23-11.16 232.13-197.46 122.23-196.88-119.29z" style="stroke:#000000;stroke-width:16;fill:#ff0000" inkscape:connector-curvature="0"/>
<g id="g3032" style="fill:#ff0000" transform="matrix(.39948 0 0 .39948 -1174.3 -120.6)">
<path id="path3017-8" inkscape:connector-curvature="0" sodipodi:nodetypes="cccccccccccccccc" style="stroke:#000000;stroke-width:8;fill:none" d="m560.49 177.48-4.4133 214.78m-314.82 594.33 639.93 7.35m-817.93 70.66 179.47-76.54 310.4 373.64 325.11-370.7 142.56 48.4m-960.32-541.11 497.07-104.55 491.15 106.02-177.81 489.77-317.76-597.27-314.81 592.86z"/>
</g>
</g>
<flowRoot id="flowRoot3329-1-2-8-1" xml:space="preserve" style="letter-spacing:0px;color:#000000;word-spacing:0px;line-height:125%;fill:#000000" transform="matrix(.25983 0 0 .25983 1080.1 499.13)">
<flowRegion id="flowRegion3331-4-2-5-8">
<rect id="rect3333-2-1-7-9" y="-1096.2" width="411.95" x="-643.97" height="250.96"/>
</flowRegion>
<flowPara id="flowPara3391-3-6-6-2" style="font-size:220px;font-weight:bold">D20</flowPara>
</flowRoot>
<flowRoot id="flowRoot3329-1-2-8-7" xml:space="preserve" style="letter-spacing:0px;color:#000000;word-spacing:0px;line-height:125%;fill:#000000" transform="matrix(.25983 0 0 .25983 469.73 316.56)">
<flowRegion id="flowRegion3331-4-2-5-9">
<rect id="rect3333-2-1-7-5" y="-1200.4" width="288.84" x="-691.32" height="250.96"/>
</flowRegion>
<flowPara id="flowPara3611" style="font-size:220px;font-weight:bold">1</flowPara>
</flowRoot>
<flowRoot id="flowRoot3329-1-2-8-7-3" xml:space="preserve" style="letter-spacing:0px;color:#000000;word-spacing:0px;line-height:125%;fill:#000000" transform="matrix(.25983 0 0 .25983 529.34 316.56)">
<flowRegion id="flowRegion3331-4-2-5-9-1">
<rect id="rect3333-2-1-7-5-2" y="-1200.4" width="288.84" x="-691.32" height="250.96"/>
</flowRegion>
<flowPara id="flowPara3611-3" style="font-size:220px;font-weight:bold">2</flowPara>
</flowRoot>
<flowRoot id="flowRoot3329-1-2-8-7-34" xml:space="preserve" style="letter-spacing:0px;color:#000000;word-spacing:0px;line-height:125%;fill:#000000" transform="matrix(.25983 0 0 .25983 594.64 315.86)">
<flowRegion id="flowRegion3331-4-2-5-9-11">
<rect id="rect3333-2-1-7-5-3" y="-1200.4" width="288.84" x="-691.32" height="250.96"/>
</flowRegion>
<flowPara id="flowPara3611-8" style="font-size:220px;font-weight:bold">3</flowPara>
</flowRoot>
<flowRoot id="flowRoot3329-1-2-8-7-7" xml:space="preserve" style="letter-spacing:0px;color:#000000;word-spacing:0px;line-height:125%;fill:#000000" transform="matrix(.25983 0 0 .25983 637.31 382.27)">
<flowRegion id="flowRegion3331-4-2-5-9-4">
<rect id="rect3333-2-1-7-5-27" y="-1200.4" width="288.84" x="-691.32" height="250.96"/>
</flowRegion>
<flowPara id="flowPara3611-7" style="font-size:220px;font-weight:bold">14</flowPara>
</flowRoot>
<flowRoot id="flowRoot3329-1-2-8-7-9" xml:space="preserve" style="letter-spacing:0px;color:#000000;word-spacing:0px;line-height:125%;fill:#000000" transform="matrix(.25983 0 0 .25983 720.27 381.86)">
<flowRegion id="flowRegion3331-4-2-5-9-3">
<rect id="rect3333-2-1-7-5-1" y="-1200.4" width="288.84" x="-691.32" height="250.96"/>
</flowRegion>
<flowPara id="flowPara3611-9" style="font-size:220px;font-weight:bold">15</flowPara>
</flowRoot>
<flowRoot id="flowRoot3329-1-2-8-7-8" xml:space="preserve" style="letter-spacing:0px;color:#000000;word-spacing:0px;line-height:125%;fill:#000000" transform="matrix(.25983 0 0 .25983 803.23 381.97)">
<flowRegion id="flowRegion3331-4-2-5-9-6">
<rect id="rect3333-2-1-7-5-5" y="-1200.4" width="288.84" x="-691.32" height="250.96"/>
</flowRegion>
<flowPara id="flowPara3611-0" style="font-size:220px;font-weight:bold">16</flowPara>
</flowRoot>
<flowRoot id="flowRoot3329-1-2-8-7-2" xml:space="preserve" style="letter-spacing:0px;color:#000000;word-spacing:0px;line-height:125%;fill:#000000" transform="matrix(.25983 0 0 .25983 886.19 382.38)">
<flowRegion id="flowRegion3331-4-2-5-9-8">
<rect id="rect3333-2-1-7-5-6" y="-1200.4" width="288.84" x="-691.32" height="250.96"/>
</flowRegion>
<flowPara id="flowPara3611-02" style="font-size:220px;font-weight:bold">17</flowPara>
</flowRoot>
<flowRoot id="flowRoot3329-1-2-8-7-4" xml:space="preserve" style="letter-spacing:0px;color:#000000;word-spacing:0px;line-height:125%;fill:#000000" transform="matrix(.25983 0 0 .25983 969.15 381.74)">
<flowRegion id="flowRegion3331-4-2-5-9-86">
<rect id="rect3333-2-1-7-5-50" y="-1200.4" width="288.84" x="-691.32" height="250.96"/>
</flowRegion>
<flowPara id="flowPara3611-90" style="font-size:220px;font-weight:bold">18</flowPara>
</flowRoot>
<flowRoot id="flowRoot3329-1-2-8-7-0" xml:space="preserve" style="letter-spacing:0px;color:#000000;word-spacing:0px;line-height:125%;fill:#000000" transform="matrix(.25983 0 0 .25983 1052.1 381.79)">
<flowRegion id="flowRegion3331-4-2-5-9-61">
<rect id="rect3333-2-1-7-5-38" y="-1200.4" width="288.84" x="-691.32" height="250.96"/>
</flowRegion>
<flowPara id="flowPara3611-93" style="font-size:220px;font-weight:bold">19</flowPara>
</flowRoot>
<flowRoot id="flowRoot3329-1-2-8-7-44" xml:space="preserve" style="letter-spacing:0px;color:#000000;word-spacing:0px;line-height:125%;fill:#000000" transform="matrix(.25983 0 0 .25983 1138.2 382.08)">
<flowRegion id="flowRegion3331-4-2-5-9-60">
<rect id="rect3333-2-1-7-5-66" y="-1200.4" width="288.84" x="-691.32" height="250.96"/>
</flowRegion>
<flowPara id="flowPara3611-1" style="font-size:220px;font-weight:bold">20</flowPara>
</flowRoot>
<flowRoot id="flowRoot3329-1-2-8-7-34-8" xml:space="preserve" style="letter-spacing:0px;color:#000000;word-spacing:0px;line-height:125%;fill:#000000" transform="matrix(.25983 0 0 .25983 661.45 316.56)">
<flowRegion id="flowRegion3331-4-2-5-9-11-4">
<rect id="rect3333-2-1-7-5-3-9" y="-1200.4" width="288.84" x="-691.32" height="250.96"/>
</flowRegion>
<flowPara id="flowPara3611-8-6" style="font-size:220px;font-weight:bold">4</flowPara>
</flowRoot>
<flowRoot id="flowRoot3329-1-2-8-7-34-3" xml:space="preserve" style="letter-spacing:0px;color:#000000;word-spacing:0px;line-height:125%;fill:#000000" transform="matrix(.25983 0 0 .25983 727.92 315.86)">
<flowRegion id="flowRegion3331-4-2-5-9-11-7">
<rect id="rect3333-2-1-7-5-3-8" y="-1200.4" width="288.84" x="-691.32" height="250.96"/>
</flowRegion>
<flowPara id="flowPara3611-8-8" style="font-size:220px;font-weight:bold">5</flowPara>
</flowRoot>
<flowRoot id="flowRoot3329-1-2-8-7-34-2" xml:space="preserve" style="letter-spacing:0px;color:#000000;word-spacing:0px;line-height:125%;fill:#000000" transform="matrix(.25983 0 0 .25983 794.08 315.86)">
<flowRegion id="flowRegion3331-4-2-5-9-11-9">
<rect id="rect3333-2-1-7-5-3-1" y="-1200.4" width="288.84" x="-691.32" height="250.96"/>
</flowRegion>
<flowPara id="flowPara3611-8-3" style="font-size:220px;font-weight:bold">6</flowPara>
</flowRoot>
<flowRoot id="flowRoot3329-1-2-8-7-34-5" xml:space="preserve" style="letter-spacing:0px;color:#000000;word-spacing:0px;line-height:125%;fill:#000000" transform="matrix(.25983 0 0 .25983 859.94 316.56)">
<flowRegion id="flowRegion3331-4-2-5-9-11-98">
<rect id="rect3333-2-1-7-5-3-4" y="-1200.4" width="288.84" x="-691.32" height="250.96"/>
</flowRegion>
<flowPara id="flowPara3611-8-0" style="font-size:220px;font-weight:bold">7</flowPara>
</flowRoot>
<flowRoot id="flowRoot3329-1-2-8-7-34-7" xml:space="preserve" style="letter-spacing:0px;color:#000000;word-spacing:0px;line-height:125%;fill:#000000" transform="matrix(.25983 0 0 .25983 925.41 315.83)">
<flowRegion id="flowRegion3331-4-2-5-9-11-6">
<rect id="rect3333-2-1-7-5-3-3" y="-1200.4" width="288.84" x="-691.32" height="250.96"/>
</flowRegion>
<flowPara id="flowPara3611-8-61" style="font-size:220px;font-weight:bold">8</flowPara>
</flowRoot>
<flowRoot id="flowRoot3329-1-2-8-7-34-54" xml:space="preserve" style="letter-spacing:0px;color:#000000;word-spacing:0px;line-height:125%;fill:#000000" transform="matrix(.25983 0 0 .25983 991.35 315.83)">
<flowRegion id="flowRegion3331-4-2-5-9-11-2">
<rect id="rect3333-2-1-7-5-3-0" y="-1200.4" width="288.84" x="-691.32" height="250.96"/>
</flowRegion>
<flowPara id="flowPara3611-8-9" style="font-size:220px;font-weight:bold">9</flowPara>
</flowRoot>
<flowRoot id="flowRoot3329-1-2-8-7-34-73" xml:space="preserve" style="letter-spacing:0px;color:#000000;word-spacing:0px;line-height:125%;fill:#000000" transform="matrix(.25983 0 0 .25983 1054.5 315.86)">
<flowRegion id="flowRegion3331-4-2-5-9-11-72">
<rect id="rect3333-2-1-7-5-3-6" y="-1200.4" width="288.84" x="-691.32" height="250.96"/>
</flowRegion>
<flowPara id="flowPara3611-8-01" style="font-size:220px;font-weight:bold">10</flowPara>
</flowRoot>
<flowRoot id="flowRoot3329-1-2-8-7-34-6" xml:space="preserve" style="letter-spacing:0px;color:#000000;word-spacing:0px;line-height:125%;fill:#000000" transform="matrix(.25983 0 0 .25983 1149.3 316.56)">
<flowRegion id="flowRegion3331-4-2-5-9-11-5">
<rect id="rect3333-2-1-7-5-3-7" y="-1200.4" width="288.84" x="-691.32" height="250.96"/>
</flowRegion>
<flowPara id="flowPara3611-8-5" style="font-size:220px;font-weight:bold">11</flowPara>
</flowRoot>
<flowRoot id="flowRoot3329-1-2-8-7-34-4" xml:space="preserve" style="letter-spacing:0px;color:#000000;word-spacing:0px;line-height:125%;fill:#000000" transform="matrix(.25983 0 0 .25983 471.39 382.49)">
<flowRegion id="flowRegion3331-4-2-5-9-11-1">
<rect id="rect3333-2-1-7-5-3-2" y="-1200.4" width="288.84" x="-691.32" height="250.96"/>
</flowRegion>
<flowPara id="flowPara3611-8-00" style="font-size:220px;font-weight:bold">12</flowPara>
</flowRoot>
<flowRoot id="flowRoot3329-1-2-8-7-34-1" xml:space="preserve" style="letter-spacing:0px;color:#000000;word-spacing:0px;line-height:125%;fill:#000000" transform="matrix(.25983 0 0 .25983 554.35 382.19)">
<flowRegion id="flowRegion3331-4-2-5-9-11-46">
<rect id="rect3333-2-1-7-5-3-07" y="-1200.4" width="288.84" x="-691.32" height="250.96"/>
</flowRegion>
<flowPara id="flowPara3611-8-1" style="font-size:220px;font-weight:bold">13</flowPara>
</flowRoot>
<flowRoot id="flowRoot3329-1-2-8-7-7-7" xml:space="preserve" style="letter-spacing:0px;color:#000000;word-spacing:0px;line-height:125%;fill:#000000" transform="matrix(.25983 0 0 .25983 637.66 450.97)">
<flowRegion id="flowRegion3331-4-2-5-9-4-7">
<rect id="rect3333-2-1-7-5-27-7" y="-1200.4" width="288.84" x="-691.32" height="250.96"/>
</flowRegion>
<flowPara id="flowPara3611-7-7" style="font-size:220px;font-weight:bold">40</flowPara>
</flowRoot>
<flowRoot id="flowRoot3329-1-2-8-7-9-3" xml:space="preserve" style="letter-spacing:0px;color:#000000;word-spacing:0px;line-height:125%;fill:#000000" transform="matrix(.25983 0 0 .25983 720.62 450.56)">
<flowRegion id="flowRegion3331-4-2-5-9-3-3">
<rect id="rect3333-2-1-7-5-1-5" y="-1200.4" width="288.84" x="-691.32" height="250.96"/>
</flowRegion>
<flowPara id="flowPara3611-9-9" style="font-size:220px;font-weight:bold">50</flowPara>
</flowRoot>
<flowRoot id="flowRoot3329-1-2-8-7-8-9" xml:space="preserve" style="letter-spacing:0px;color:#000000;word-spacing:0px;line-height:125%;fill:#000000" transform="matrix(.25983 0 0 .25983 803.58 450.67)">
<flowRegion id="flowRegion3331-4-2-5-9-6-8">
<rect id="rect3333-2-1-7-5-5-1" y="-1200.4" width="288.84" x="-691.32" height="250.96"/>
</flowRegion>
<flowPara id="flowPara3611-0-8" style="font-size:220px;font-weight:bold">60</flowPara>
</flowRoot>
<flowRoot id="flowRoot3329-1-2-8-7-2-2" xml:space="preserve" style="letter-spacing:0px;color:#000000;word-spacing:0px;line-height:125%;fill:#000000" transform="matrix(.25983 0 0 .25983 886.54 451.08)">
<flowRegion id="flowRegion3331-4-2-5-9-8-6">
<rect id="rect3333-2-1-7-5-6-6" y="-1200.4" width="288.84" x="-691.32" height="250.96"/>
</flowRegion>
<flowPara id="flowPara3611-02-0" style="font-size:220px;font-weight:bold">70</flowPara>
</flowRoot>
<flowRoot id="flowRoot3329-1-2-8-7-4-3" xml:space="preserve" style="letter-spacing:0px;color:#000000;word-spacing:0px;line-height:125%;fill:#000000" transform="matrix(.25983 0 0 .25983 969.5 450.44)">
<flowRegion id="flowRegion3331-4-2-5-9-86-8">
<rect id="rect3333-2-1-7-5-50-0" y="-1200.4" width="288.84" x="-691.32" height="250.96"/>
</flowRegion>
<flowPara id="flowPara3611-90-1" style="font-size:220px;font-weight:bold">80</flowPara>
</flowRoot>
<flowRoot id="flowRoot3329-1-2-8-7-0-2" xml:space="preserve" style="letter-spacing:0px;color:#000000;word-spacing:0px;line-height:125%;fill:#000000" transform="matrix(.25983 0 0 .25983 1052.5 450.49)">
<flowRegion id="flowRegion3331-4-2-5-9-61-5">
<rect id="rect3333-2-1-7-5-38-0" y="-1200.4" width="288.84" x="-691.32" height="250.96"/>
</flowRegion>
<flowPara id="flowPara3611-93-9" style="font-size:220px;font-weight:bold">90</flowPara>
</flowRoot>
<flowRoot id="flowRoot3329-1-2-8-7-44-4" xml:space="preserve" style="letter-spacing:0px;color:#000000;word-spacing:0px;line-height:125%;fill:#000000" transform="matrix(.25983 0 0 .25983 1138.5 450.78)">
<flowRegion id="flowRegion3331-4-2-5-9-60-7">
<rect id="rect3333-2-1-7-5-66-8" y="-1200.4" width="288.84" x="-691.32" height="250.96"/>
</flowRegion>
<flowPara id="flowPara3611-1-3" style="font-size:220px;font-weight:bold"> 0</flowPara>
</flowRoot>
<flowRoot id="flowRoot3329-1-2-8-7-34-4-5" xml:space="preserve" style="letter-spacing:0px;color:#000000;word-spacing:0px;line-height:125%;fill:#000000" transform="matrix(.25983 0 0 .25983 471.74 451.19)">
<flowRegion id="flowRegion3331-4-2-5-9-11-1-1">
<rect id="rect3333-2-1-7-5-3-2-2" y="-1200.4" width="288.84" x="-691.32" height="250.96"/>
</flowRegion>
<flowPara id="flowPara3611-8-00-0" style="font-size:220px;font-weight:bold">00</flowPara>
</flowRoot>
<flowRoot id="flowRoot3329-1-2-8-7-34-1-1" xml:space="preserve" style="letter-spacing:0px;color:#000000;word-spacing:0px;line-height:125%;fill:#000000" transform="matrix(.25983 0 0 .25983 554.7 450.89)">
<flowRegion id="flowRegion3331-4-2-5-9-11-46-6">
<rect id="rect3333-2-1-7-5-3-07-4" y="-1200.4" width="288.84" x="-691.32" height="250.96"/>
</flowRegion>
<flowPara id="flowPara3611-8-1-0" style="font-size:220px;font-weight:bold">30</flowPara>
</flowRoot>
<flowRoot id="flowRoot3329-1-2-8-7-7-6" xml:space="preserve" style="letter-spacing:0px;color:#000000;word-spacing:0px;line-height:125%;fill:#000000" transform="matrix(.25983 0 0 .25983 558.19 623.85)">
<flowRegion id="flowRegion3331-4-2-5-9-4-1">
<rect id="rect3333-2-1-7-5-27-8" y="-1200.4" width="374.07" x="-691.32" height="303.05"/>
</flowRegion>
<flowPara id="flowPara3611-7-9" style="font-size:300px;font-weight:bold">*</flowPara>
</flowRoot>
<flowRoot id="flowRoot3329-1-2-8-7-8-3" xml:space="preserve" style="letter-spacing:0px;color:#000000;word-spacing:0px;line-height:125%;fill:#000000" transform="matrix(.25983 0 0 .25983 487.23 618.05)">
<flowRegion id="flowRegion3331-4-2-5-9-6-9">
<rect id="rect3333-2-1-7-5-5-8" y="-1200.4" width="288.84" x="-691.32" height="250.96"/>
</flowRegion>
<flowPara id="flowPara3611-0-80" style="font-size:220px;font-weight:bold">X</flowPara>
</flowRoot>
<flowRoot id="flowRoot3329-1-2-8-7-34-4-9" xml:space="preserve" style="letter-spacing:0px;color:#000000;word-spacing:0px;line-height:125%;fill:#000000" transform="matrix(.25983 0 0 .25983 466.81 522.55)">
<flowRegion id="flowRegion3331-4-2-5-9-11-1-6">
<rect id="rect3333-2-1-7-5-3-2-8" ry="0" height="298.31" width="255.7" y="-1205.2" x="-691.32"/>
</flowRegion>
<flowPara id="flowPara3611-8-00-3" style="font-size:300px;font-weight:bold"> - </flowPara>
</flowRoot>
<flowRoot id="flowRoot3329-1-2-8-7-34-1-4" xml:space="preserve" style="letter-spacing:0px;color:#000000;word-spacing:0px;line-height:125%;fill:#000000" transform="matrix(.25983 0 0 .25983 539.31 524.4)">
<flowRegion id="flowRegion3331-4-2-5-9-11-46-8">
<rect id="rect3333-2-1-7-5-3-07-49" y="-1200.4" width="303.05" x="-691.32" height="307.78"/>
</flowRegion>
<flowPara id="flowPara3611-8-1-9" style="font-size:300px;font-weight:bold">+</flowPara>
</flowRoot>
<metadata id="metadata241">
<rdf:RDF>
<cc:Work>
<dc:format>image/svg+xml</dc:format>
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
<cc:license rdf:resource="http://creativecommons.org/licenses/publicdomain/"/>
<dc:publisher>
<cc:Agent rdf:about="http://openclipart.org/">
<dc:title>Openclipart</dc:title>
</cc:Agent>
</dc:publisher>
</cc:Work>
<cc:License rdf:about="http://creativecommons.org/licenses/publicdomain/">
<cc:permits rdf:resource="http://creativecommons.org/ns#Reproduction"/>
<cc:permits rdf:resource="http://creativecommons.org/ns#Distribution"/>
<cc:permits rdf:resource="http://creativecommons.org/ns#DerivativeWorks"/>
</cc:License>
</rdf:RDF>
</metadata>
</svg>

After

Width:  |  Height:  |  Size: 31 KiB

1
docs/INSTALL.md Normal file
View File

@ -0,0 +1 @@
Install from manifest link

77
docs/USAGE.md Normal file
View File

@ -0,0 +1,77 @@
# Rolemaster Standard System for Foundry VTT Usage
## Understanding Foundry Data
In Foundry VTT characters, NPC's and Creatures are called Actors and almost everything else is referred to as an Item. As a result of this things in Rolemaster that you would associate with Characters like Skills and Skill Categories are actually items.
## Creating a Character
To create a character click on the Actor tab and click "Create Actor". You can choose between an NPC and a Character, however the NPC is unfinished at this point.
![Installing the RMSS Directory](img/create_actor.jpg)
Once you have create your Character you can view the character sheet.
![Installing the RMSS Directory](img/actor_sheet.jpg)
From here you can start filling out fields. Most fields are cosmetic at this point however as you start filling out your stats you will notice the Stat Bonus is auto calculated and Foundry will also attempt to calculate your Resistance Rolls (Racial Bonuses are not supported yet).
Skill Categories and Skills are considered Items by Foundry, see the following section.
## Understanding Items Types
When you create an item you will see the following drop down:
![Installing the RMSS Directory](img/create_item.jpg)
The items you can create are as follows:
- Skill Category
- Skill
- Spell
- Item
- Armor
- Weapon
- Transport (Not complete)
- Herb or Poison
Every item on this list can be dragged onto the character sheet and added to a character. Rather than making an item for each character, consider building a library of items that you can drag on to any character you want.
## Creating a Skill Category
When you create a Skill Category you can set the three dropdowns at the top to mark a stat as being applicable to this skill category. After you have done this Foundry will attempt to auto calculate the Stat Bonus when the Skill Category has been dragged onto a character sheet.
As you fill out the other fields Foundry will attempt to calculate the Total Bonus for this Skill Category.
![Installing the RMSS Directory](img/skill_category.jpg)
If you click on the Compendiums Tab you will find a compendium with the skill categories from the character sheet ready for you to use.
![Installing the RMSS Directory](img/skill_category_compendium.jpg)
## Dragging a Skill Category onto your Character Sheet
If you drag a skill category onto your character sheet that has the Applicable Stats set you can see that Foundry will apply the appropriate Stat Bonus to the Skill Category. Things like Ranks, Rank Bonuses, Profession Bonuses and Special Bonuses are manually entered but will be taken into account when the Total bonus is calculated.
If you make a mistake selecting the applicable stats you can just click the pencil icon to edit it.
![Installing the RMSS Directory](img/skill_category_stat_bonus.jpg)
## Creating a Skill
When you create a skill you will be unable to select a skill category as the skill has no owner and Foundry does not know what skill categories are available to it.
![Installing the RMSS Directory](img/create_skill.jpg)
Once you have dragged the Skill onto the character sheet you will be able select a skill category and Foundry will start to apply the Category Bonus. Like Skill Categories; things like Ranks, Rank Bonuses, Items Bonuses and Special Bonuses are manually entered but will be taken into account when the Total bonus is calculated.
![Installing the RMSS Directory](img/owned_skill.jpg)
When you select a skill as a favorite you can see it added to the front page of the character sheet for quick reference
![Installing the RMSS Directory](img/skill_favorite.jpg)
## Adding Items
Items such as mundane Items, Weapons, Armor and Herbs can be created in Foundry and then dragged to the Equipment Screen on the character sheet. Additionally they can be created directly on the sheet if need be. Items to not have any direct functionality yet and appear for record keeping purposes only.
![Installing the RMSS Directory](img/equipment.jpg)
## Adding Spells
Spells can be added to the Spells tab in much the same way that items can. They can be favorited and will appear on the front page of the character sheet. Spells to not have any direct functionality yet and appear for record keeping purposes only.
![Installing the RMSS Directory](img/spells.jpg)

BIN
docs/img/actor_sheet.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

BIN
docs/img/create_actor.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

BIN
docs/img/create_item.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

BIN
docs/img/create_skill.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

BIN
docs/img/create_world.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

BIN
docs/img/download.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

BIN
docs/img/equipment.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 99 KiB

BIN
docs/img/install.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

BIN
docs/img/installed.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 97 KiB

BIN
docs/img/locate.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

BIN
docs/img/owned_skill.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

BIN
docs/img/skill_category.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

BIN
docs/img/skill_favorite.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 75 KiB

BIN
docs/img/spells.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

View File

@ -1,9 +1,9 @@
var gulp = require('gulp');
var less = require('gulp.less');
var less = require('gulp-less');
gulp.task('less', function (cb) {
gulp
.src('less/rmss.less')
.src('less/rmfrp.less')
.pipe(less())
.pipe(gulp.dest("./"));
cb();
@ -15,4 +15,4 @@ gulp.task(
gulp.watch('less/*.less', gulp.series('less'));
cb();
})
);
);

View File

@ -1,5 +1,6 @@
{
"rmss": {
"rmfrp": {
"player_character": {
"name": "Name:",
"level": "Level:",
@ -33,13 +34,18 @@
"stat_total": "Total"
}
},
"pc_sheet": {
"import_skillcat": "Import"
},
"pc_sheet_tabs": {
"record": "Record",
"skill_categories": "Skill Categories",
"skills": "Skills",
"equipment": "Equipment",
"spells": "Spells",
"status_record": "Status Record",
"experience_points": "Experience Points"
"experience_points": "Experience Points",
"background": "Background"
},
"pc_sheet_fixed_info": {
"race": "Race:",
@ -127,9 +133,11 @@
"prof_bonus": "Prof Bonus",
"special_bonus": "Special Bonus",
"total_bonus": "Total Bonus",
"add_skillcat": "Add Skill Category"
"import_skillcat": "Import Skill Categories"
},
"pc_sheet_items": {
"equipped": "Equipped",
"worn": "Worn",
"favorite": "Favorite",
"quantity": "Quantity",
"item_name": "Item Name",
@ -137,6 +145,21 @@
"cost": "Cost",
"add_item": "Add Item"
},
"pc_sheet_spell": {
"favorite": "Favorite",
"level": "Level",
"name": "Name",
"spell_list": "Spell List",
"area_of_effect": "Area of Effect",
"duration": "Duration",
"range": "Range",
"type": "Type"
},
"pc_sheet_language": {
"name": "Name",
"spoken": "Spoken",
"written": "Written"
},
"entity_sheet": {
"spell": "RMSS Spell",
"weapon": "RMSS Weapon",
@ -159,11 +182,13 @@
"cp": "Copper Pieces"
},
"item": {
"worn": "Worn",
"description": "Other Notes",
"quantity": "Quantity",
"weight": "Weight",
"cost": "Cost",
"prod_time": "Production Time"
"prod_time": "Production Time",
"equipped": "Equipped"
},
"armor": {
"at": "AT",
@ -178,7 +203,19 @@
"weight": "Weight",
"breakage_range": "B#s",
"strength": "Str",
"fumble_range": "Fumble"
"fumble_range": "Fumble",
"equipped": "Equipped",
"skill": "Skill",
"hits_multiplier": "Hits Multiplier",
"attack_table": "Attack Table",
"max_rank_size": "Max Rank Size",
"critical_table": "Critical Table",
"lsl_crit_column": "LSL",
"range_modifier": "Range Modifier",
"weapon_bonus": "Weapon Bonus",
"fumble_value": "Fumble Max Value",
"fumble_table": "Fumble Table",
"fumble_column": "Fumble Column"
},
"herb_or_poison": {
"codes": "Codes",
@ -198,6 +235,7 @@
"offensive_bonus": "OB"
},
"spell": {
"favorite": "Favorite",
"spell_list": "Spell List",
"level": "Level",
"area_of_effect": "Area of Effect",
@ -230,6 +268,11 @@
"special_bonus_2": "Special Bonus 2:",
"total_bonus": "Total Bonus:",
"description": "Description:"
},
"language": {
"spoken": "Spoken",
"written": "Written",
"description": "Description"
}
}
}

View File

@ -0,0 +1,44 @@
.armor-grid-container {
display: grid;
grid-template-columns: [name] 30% [equipped] 12% [at] 12% [quantity] 12% [weight] 12% [cost] 12% [controls] 10%;
}
.armor-grid-container > div {
font-family: Signika, sans-serif;
font-size: 12px;
text-align: center;
border-bottom: 1px solid;
padding-top: 3px;
padding-bottom: 3px;
display: flex;
justify-content: flex-end;
flex-direction: row;
justify-content: center;
}
.armor-grid-container > div:nth-child(14n+1),
.armor-grid-container > div:nth-child(14n+2),
.armor-grid-container > div:nth-child(14n+3),
.armor-grid-container > div:nth-child(14n+4),
.armor-grid-container > div:nth-child(14n+5),
.armor-grid-container > div:nth-child(14n+6),
.armor-grid-container > div:nth-child(14n+7)
{
font-family: Signika, sans-serif;
font-size: 12px;
text-align: center;
border-bottom: 1px solid;
padding-top: 3px;
padding-bottom: 3px;
display: flex;
justify-content: flex-end;
flex-direction: row;
justify-content: center;
background-image: linear-gradient(rgba(0, 0, 0, 0.1) 0 0);
}
.armor-grid-heading {
font-weight: bold;
border-bottom: 1px solid;
background-image: linear-gradient(rgba(0, 0, 0, 0.1) 0 0);
}

View File

@ -0,0 +1,44 @@
.herbs-grid-container {
display: grid;
grid-template-columns: [name] 30% [quantity] 11% [codes] 12% [af] 12% [weight] 12% [cost] 11% [controls] 12%;
}
.herbs-grid-container > div {
font-family: Signika, sans-serif;
font-size: 12px;
text-align: center;
border-bottom: 1px solid;
padding-top: 3px;
padding-bottom: 3px;
display: flex;
justify-content: flex-end;
flex-direction: row;
justify-content: center;
}
.herbs-grid-container > div:nth-child(14n+1),
.herbs-grid-container > div:nth-child(14n+2),
.herbs-grid-container > div:nth-child(14n+3),
.herbs-grid-container > div:nth-child(14n+4),
.herbs-grid-container > div:nth-child(14n+5),
.herbs-grid-container > div:nth-child(14n+6),
.herbs-grid-container > div:nth-child(14n+7)
{
font-family: Signika, sans-serif;
font-size: 12px;
text-align: center;
border-bottom: 1px solid;
padding-top: 3px;
padding-bottom: 3px;
display: flex;
justify-content: flex-end;
flex-direction: row;
justify-content: center;
background-image: linear-gradient(rgba(0, 0, 0, 0.1) 0 0);
}
.herbs-grid-heading {
font-weight: bold;
border-bottom: 1px solid;
background-image: linear-gradient(rgba(0, 0, 0, 0.1) 0 0);
}

View File

@ -0,0 +1,43 @@
.items-grid-container {
display: grid;
grid-template-columns: [worn] 10% [name] 30% [quantity] 15% [weight] 15% [cost] 15% [controls] 15%;
}
.items-grid-container > div {
font-family: Signika, sans-serif;
font-size: 12px;
text-align: center;
border-bottom: 1px solid;
padding-top: 3px;
padding-bottom: 3px;
display: flex;
justify-content: flex-end;
flex-direction: row;
justify-content: center;
}
.items-grid-container > div:nth-child(12n+1),
.items-grid-container > div:nth-child(12n+2),
.items-grid-container > div:nth-child(12n+3),
.items-grid-container > div:nth-child(12n+4),
.items-grid-container > div:nth-child(12n+5),
.items-grid-container > div:nth-child(12n+6)
{
font-family: Signika, sans-serif;
font-size: 12px;
text-align: center;
border-bottom: 1px solid;
padding-top: 3px;
padding-bottom: 3px;
display: flex;
justify-content: flex-end;
flex-direction: row;
justify-content: center;
background-image: linear-gradient(rgba(0, 0, 0, 0.1) 0 0);
}
.items-grid-heading {
font-weight: bold;
border-bottom: 1px solid;
background-image: linear-gradient(rgba(0, 0, 0, 0.1) 0 0);
}

View File

@ -0,0 +1,9 @@
.money-column {
flex-direction: column;
}
.money-container {
flex-direction: column;
flex-shrink: 1;
padding-left: 10px;
}

View File

@ -0,0 +1,18 @@
.resistances-grid-container {
outline: 1px solid; /* use instead of border */
margin-top: 1px;
margin-left: 1px;
padding: 5px;
display: grid;
grid-template-columns: [Name] 40% [Value] 20% [Race_Mod] 20% [Total] 20%;
}
.resistances-grid-heading {
font-weight: bold;
border-bottom: 1px solid;
background-image: linear-gradient(rgba(0, 0, 0, 0.1) 0 0);
}
.resistance-input {
width: 50%
}

View File

@ -0,0 +1,53 @@
.skillcat-grid-container {
display: grid;
grid-template-columns: [skill-category-name] 10% [applicable-stats] 10% [dev-cost] 8% [num-ranks] 8% [new-ranks] 8% [rank-bonus] 8% [stat-bonus] 8% [prof-bonus] 8% [special-bonus-1] 8% [special-bonus-2] 8% [total-bonus] 8% [controls] 8%;
}
.skillcat-grid-container > div {
font-family: Signika, sans-serif;
font-size: 12px;
text-align: center;
border-bottom: 1px solid;
padding-top: 3px;
padding-bottom: 3px;
display: flex;
justify-content: flex-end;
//flex-direction: column;
justify-content: center;
}
.skillcat-grid-container > div:nth-child(24n+1),
.skillcat-grid-container > div:nth-child(24n+2),
.skillcat-grid-container > div:nth-child(24n+3),
.skillcat-grid-container > div:nth-child(24n+4),
.skillcat-grid-container > div:nth-child(24n+5),
.skillcat-grid-container > div:nth-child(24n+6),
.skillcat-grid-container > div:nth-child(24n+7),
.skillcat-grid-container > div:nth-child(24n+8),
.skillcat-grid-container > div:nth-child(24n+9),
.skillcat-grid-container > div:nth-child(24n+10),
.skillcat-grid-container > div:nth-child(24n+11),
.skillcat-grid-container > div:nth-child(24n+12)
{
font-family: Signika, sans-serif;
font-size: 12px;
text-align: center;
border-bottom: 1px solid;
padding-top: 3px;
padding-bottom: 3px;
display: flex;
justify-content: flex-end;
//flex-direction: column;
justify-content: center;
background-image: linear-gradient(rgba(0, 0, 0, 0.1) 0 0);
}
.skillcat-grid-heading {
font-weight: bold;
border-bottom: 1px solid;
background-image: linear-gradient(rgba(0, 0, 0, 0.1) 0 0);
}
.skill-box {
margin-left: 1.2rem;
background-color: lightgrey;
}

View File

@ -0,0 +1,53 @@
.skills-grid-container {
display: grid;
grid-template-columns: [favorite] 9% [skill-name] 11% [num-ranks] 9% [new-ranks] 9% [rank-bonus] 9% [category-bonus] 9% [item-bonus] 9% [special-bonus-1] 9% [special-bonus-2] 9% [total-bonus] 9% [controls] 8%;
}
.skills-grid-container > div {
font-family: Signika, sans-serif;
font-size: 12px;
text-align: center;
border-bottom: 1px solid;
padding-top: 3px;
padding-bottom: 3px;
display: flex;
justify-content: flex-end;
//flex-direction: column;
justify-content: center;
}
.skills-grid-container > div:nth-child(22n+1),
.skills-grid-container > div:nth-child(22n+2),
.skills-grid-container > div:nth-child(22n+3),
.skills-grid-container > div:nth-child(22n+4),
.skills-grid-container > div:nth-child(22n+5),
.skills-grid-container > div:nth-child(22n+6),
.skills-grid-container > div:nth-child(22n+7),
.skills-grid-container > div:nth-child(22n+8),
.skills-grid-container > div:nth-child(22n+9),
.skills-grid-container > div:nth-child(22n+10),
.skills-grid-container > div:nth-child(22n+11)
{
font-family: Signika, sans-serif;
font-size: 12px;
text-align: center;
border-bottom: 1px solid;
padding-top: 3px;
padding-bottom: 3px;
display: flex;
justify-content: flex-end;
//flex-direction: column;
justify-content: center;
background-image: linear-gradient(rgba(0, 0, 0, 0.1) 0 0);
}
.skills-grid-heading {
font-weight: bold;
border-bottom: 1px solid;
background-image: linear-gradient(rgba(0, 0, 0, 0.1) 0 0);
}
.skills-name-left-align {
text-align: left;
padding-left: 2px;
}

View File

@ -0,0 +1,46 @@
.spell-grid-container {
display: grid;
grid-template-columns: [favorite] 9% [level] 8% [name] 30% [spell_list] 9% [area_of_effect] 9% [duration] 9% [range] 9% [type] 9% [controls] 8%;
}
.spell-grid-container > div {
font-family: Signika, sans-serif;
font-size: 12px;
text-align: center;
border-bottom: 1px solid;
padding-top: 3px;
padding-bottom: 3px;
display: flex;
justify-content: flex-end;
flex-direction: row;
justify-content: center;
}
.spell-grid-container > div:nth-child(18n+1),
.spell-grid-container > div:nth-child(18n+2),
.spell-grid-container > div:nth-child(18n+3),
.spell-grid-container > div:nth-child(18n+4),
.spell-grid-container > div:nth-child(18n+5),
.spell-grid-container > div:nth-child(18n+6),
.spell-grid-container > div:nth-child(18n+7),
.spell-grid-container > div:nth-child(18n+8),
.spell-grid-container > div:nth-child(18n+9)
{
font-family: Signika, sans-serif;
font-size: 12px;
text-align: center;
border-bottom: 1px solid;
padding-top: 3px;
padding-bottom: 3px;
display: flex;
justify-content: flex-end;
flex-direction: row;
justify-content: center;
background-image: linear-gradient(rgba(0, 0, 0, 0.1) 0 0);
}
.spell-grid-heading {
font-weight: bold;
border-bottom: 1px solid;
background-image: linear-gradient(rgba(0, 0, 0, 0.1) 0 0);
}

View File

@ -0,0 +1,46 @@
.weapons-grid-container {
display: grid;
grid-template-columns: [name] 30% [equipped] 8% [breakage_range] 9% [fumble_range] 9% [strength] 9% [quantity] 9% [weight] 9% [cost] 9% [controls] 8%;
}
.weapons-grid-container > div {
font-family: Signika, sans-serif;
font-size: 12px;
text-align: center;
border-bottom: 1px solid;
padding-top: 3px;
padding-bottom: 3px;
display: flex;
justify-content: flex-end;
flex-direction: row;
justify-content: center;
}
.weapons-grid-container > div:nth-child(18n+1),
.weapons-grid-container > div:nth-child(18n+2),
.weapons-grid-container > div:nth-child(18n+3),
.weapons-grid-container > div:nth-child(18n+4),
.weapons-grid-container > div:nth-child(18n+5),
.weapons-grid-container > div:nth-child(18n+6),
.weapons-grid-container > div:nth-child(18n+7),
.weapons-grid-container > div:nth-child(18n+8),
.weapons-grid-container > div:nth-child(18n+9)
{
font-family: Signika, sans-serif;
font-size: 12px;
text-align: center;
border-bottom: 1px solid;
padding-top: 3px;
padding-bottom: 3px;
display: flex;
justify-content: flex-end;
flex-direction: row;
justify-content: center;
background-image: linear-gradient(rgba(0, 0, 0, 0.1) 0 0);
}
.weapons-grid-heading {
font-weight: bold;
border-bottom: 1px solid;
background-image: linear-gradient(rgba(0, 0, 0, 0.1) 0 0);
}

View File

@ -0,0 +1,173 @@
// General Elements
.container {
display: flex;
}
.rm-heading {
font-size: 1.0em;
font-family: PragRoman;
border-bottom: 0px;
}
// Header CSS
.actor-icon {
flex-shrink: 1;
}
.favorite-container {
padding: 5px;
}
.header-container {
flex-grow: 2;
outline: 1px solid; /* use instead of border */
margin-top: 1px;
margin-left: 1px;
padding: 5px;
}
.header-text {
display: flex;
align-items: center;
padding: 1px;
}
.settings-button, .playersheet-settings {
font-family: Signika, sans-serif;
font-size: 12px;
margin-right: 6px
}
// Resource Elements in Headers
.resource-container {
display: flex;
flex-direction: row;
flex-grow: 3;
text-align: -webkit-center;
}
.resource-container > * {
flex: 1 1 0;
}
.resource-entry {
outline: 1px solid; /* use instead of border */
margin-top: 1px;
margin-left: 1px;
padding: 5px;
}
.resource-entry input{
width: 50px;
border: none;
}
.stat-container {
flex-direction: column;
flex-shrink: 1;
}
.stat-row {
align-items: center;
}
.equipment-container {
flex-direction: column;
flex-grow: 1;
}
.stat-block {
outline: 1px solid; /* use instead of border */
margin-top: 1px;
margin-left: 1px;
padding: 5px;
}
.stat-name, .money-name {
width: 75px;
border: none;
font-family: Signika, sans-serif;
font-size: 12px;
}
.stat-name input {
border: none;
}
.stat-header {
font-family: Signika, sans-serif;
font-size: 12px;
}
// Fixed Info CSS
.fixed-info-container {
flex-grow: 3;
flex-direction: row;
font-family: Signika, sans-serif;
font-size: 12px;
}
.fixed-info-section {
outline: 1px solid; /* use instead of border */
margin-top: 1px;
margin-left: 1px;
padding: 5px;
}
.armor-block {
outline: 1px solid; /* use instead of border */
margin-top: 1px;
margin-left: 1px;
padding: 5px;
}
.race-stat-fixed-info-block {
outline: 1px solid; /* use instead of border */
margin-top: 1px;
margin-left: 1px;
padding: 5px;
}
.role-traits-block {
outline: 1px solid; /* use instead of border */
margin-top: 1px;
margin-left: 1px;
padding: 5px;
}
.background-info-block {
outline: 1px solid; /* use instead of border */
margin-top: 1px;
margin-left: 1px;
padding: 5px;
}
// Remove Me
.resistance-block {
outline: 1px solid; /* use instead of border */
margin-top: 1px;
margin-left: 1px;
padding: 5px;
}
// Debugging
.red {
background-color: orangered;
}
.blue {
background-color: lightblue;
}
.grey {
background-color: lightgrey;
}
.green {
background-color: lightseagreen;
}

68
less/icons/R.svg Normal file
View File

@ -0,0 +1,68 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="10mm"
height="10mm"
viewBox="0 0 10 10"
version="1.1"
id="svg8"
sodipodi:docname="R.svg"
inkscape:version="0.92.3 (2405546, 2018-03-11)">
<defs
id="defs2" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="11.2"
inkscape:cx="22.566968"
inkscape:cy="24.072623"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1920"
inkscape:window-height="1017"
inkscape:window-x="1672"
inkscape:window-y="-8"
inkscape:window-maximized="1" />
<metadata
id="metadata5">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-287)">
<g
aria-label="R"
transform="matrix(0.26458333,0,0,0.26458333,-39.157593,262.07008)"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="flowRoot4539">
<path
d="m 161.01484,115.06095 q 1.08,0 2.28,0.92 1.24,0.88 2.4,2.08 1.2,1.2 2.28,2.44 1.08,1.2 1.92,1.88 2.08,1.68 4.16,3.32 2.08,1.6 4.2,3.24 0.56,0.44 1.04,0.8 0.48,0.4 0.96,0.68 0.52,0.28 1.08,0.44 0.6,0.16 1.36,0.16 0.56,0 0.68,-0.32 0.12,-0.28 0.12,-0.72 0,-0.8 -0.64,-1.8 -0.6,-1.04 -1.48,-2.04 -0.84,-1.04 -1.72,-1.96 -0.88,-0.92 -1.4,-1.52 -1.88,-2.2 -3.84,-4.4 -1.92,-2.2 -4,-4.24 0,-0.24 0,-0.4 0.04,-0.2 0.28,-0.36 1.32,-0.88 2.88,-1.68 1.56,-0.8 2.88,-1.8 1.32,-1.04 2.2,-2.4 0.92,-1.36 0.92,-3.28 0,-2.08 -0.72,-3.52 -0.72,-1.480002 -1.92,-2.440002 -1.2,-1 -2.76,-1.56 -1.56,-0.6 -3.28,-0.88 -1.72,-0.32 -3.48,-0.4 -1.72,-0.08 -3.28,-0.08 h -3.64 q -1.16,0 -2.36,0.12 -1.2,0.12 -2.36,0.12 -0.56,0 -1.44,-0.04 -0.88,-0.04 -1.72,0.08 -0.84,0.12 -1.44,0.52 -0.6,0.4 -0.6,1.28 0,0.56 0.48,0.84 0.48,0.24 1.12,0.4 0.64,0.12 1.28,0.24 0.68,0.12 1.04,0.36 -0.12,2.440002 -0.04,4.880002 0.08,2.44 0.2,4.92 0.12,2.44 0.24,4.92 0.12,2.44 0.12,4.88 0,1.8 -0.16,3.52 -0.12,1.72 -0.12,3.52 -0.4,0.48 -1.16,0.72 -0.72,0.2 -1.48,0.44 -0.72,0.2 -1.28,0.6 -0.52,0.36 -0.52,1.12 0,0.32 0.28,0.48 0.32,0.16 0.52,0.32 1.4,-0.04 2.72,-0.28 1.36,-0.24 2.76,-0.24 2.16,0 4.32,0.12 2.16,0.12 4.32,0.12 h 1.8 q 0.32,-0.16 0.56,-0.4 0.24,-0.24 0.24,-0.64 0,-0.72 -0.8,-1.08 -0.8,-0.4 -1.88,-0.6 -1.08,-0.2 -2.16,-0.28 -1.04,-0.08 -1.52,-0.2 -0.12,-0.04 -0.44,-0.12 -0.28,-0.12 -0.28,-0.32 v -10.2 z m 0,-2.08 q 0,-3.48 0.24,-6.92 0.28,-3.44 0.28,-6.920002 l 0.28,-0.52 0.24,-0.28 q 0.68,-0.04 1.28,-0.16 0.64,-0.12 1.32,-0.12 h 0.28 q 1.68,0.24 3.04,0.56 1.36,0.32 2.32,1 0.96,0.680002 1.44,1.880002 0.52,1.16 0.52,3.12 0,1.92 -0.36,3.2 -0.36,1.24 -1.04,2.04 -0.64,0.8 -1.56,1.28 -0.92,0.44 -2.04,0.76 -1.08,0.28 -2.36,0.6 -1.24,0.28 -2.56,0.76 -0.12,0 -0.36,0 -0.2,0 -0.44,0 -0.2,-0.04 -0.36,-0.08 -0.16,-0.08 -0.16,-0.2 z"
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:40px;font-family:PragRoman;-inkscape-font-specification:'PragRoman, Medium';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start"
id="path4571"
inkscape:connector-curvature="0" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.2 KiB

View File

@ -0,0 +1,354 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" id="svg2" sodipodi:docname="_svgclean2.svg" viewBox="0 0 1015.8 687.24" version="1.1" inkscape:version="0.48.3.1 r9886">
<sodipodi:namedview id="namedview4" fit-margin-left="0" inkscape:zoom="0.75585938" borderopacity="1" inkscape:current-layer="svg2" inkscape:cx="600.99803" inkscape:guide-bbox="true" inkscape:window-maximized="0" showgrid="false" fit-margin-right="0" inkscape:snap-global="false" showguides="true" bordercolor="#666666" inkscape:window-x="0" guidetolerance="10" objecttolerance="10" inkscape:window-y="0" fit-margin-bottom="0" inkscape:window-width="512" inkscape:pageopacity="0" inkscape:pageshadow="2" pagecolor="#ffffff" gridtolerance="10" inkscape:cy="-21.199467" inkscape:window-height="452" fit-margin-top="0">
<sodipodi:guide id="guide3103" position="629.48057,1441.0961" orientation="1,0"/>
<sodipodi:guide id="guide3111" position="-942.56933,2326.5579" orientation="0,1"/>
<sodipodi:guide id="guide3113" position="-402.76913,1796.2278" orientation="0,1"/>
<sodipodi:guide id="guide3115" position="520.57347,2132.4192" orientation="1,0"/>
<sodipodi:guide id="guide3117" position="1817.9882,1403.2154" orientation="1,0"/>
<sodipodi:guide id="guide3133" position="449.54717,1138.0503" orientation="0,1"/>
<sodipodi:guide id="guide3135" position="501.63317,754.50797" orientation="0,1"/>
<sodipodi:guide id="guide3137" position="747.85787,228.91293" orientation="0,1"/>
<sodipodi:guide id="guide3263" position="261.91917,1110.2316" orientation="0,1"/>
<sodipodi:guide id="guide3265" position="256.00037,898.92817" orientation="0,1"/>
<sodipodi:guide id="guide3267" position="325.02107,1065.5962" orientation="0,1"/>
<sodipodi:guide id="guide3269" position="363.72367,1167.6446" orientation="0,1"/>
<sodipodi:guide id="guide3271" position="362.53987,840.33147" orientation="0,1"/>
<sodipodi:guide id="guide3273" position="31.675468,1096.0264" orientation="1,0"/>
<sodipodi:guide id="guide3275" position="453.34934,2.6762529" orientation="1,0"/>
<sodipodi:guide id="guide3277" position="257.77597,1086.5562" orientation="1,0"/>
<sodipodi:guide id="guide3279" position="112.17197,1149.888" orientation="1,0"/>
<sodipodi:guide id="guide3281" position="556.88497,1225.4735" orientation="1,0"/>
<sodipodi:guide id="guide3297" position="271.86817,863.02927" orientation="0,1"/>
<sodipodi:guide id="guide3308" position="390.35847,1003.1002" orientation="0,1"/>
<sodipodi:guide id="guide3310" position="352.47777,1062.2889" orientation="0,1"/>
<sodipodi:guide id="guide3319" position="161.79567,945.06047" orientation="0,1"/>
</sodipodi:namedview>
<flowRoot id="flowRoot3321" xml:space="preserve" style="letter-spacing:0px;color:#000000;word-spacing:0px;line-height:125%;fill:#000000" transform="translate(1784.8 -879.48)">
<flowRegion id="flowRegion3323">
<rect id="rect3325" y="-1082" width="1098.5" x="-634.5" height="454.57"/>
</flowRegion>
<flowPara id="flowPara3327"/>
</flowRoot>
<flowRoot id="flowRoot3329-1-2-8-7-9-8" xml:space="preserve" style="letter-spacing:0px;color:#000000;word-spacing:0px;line-height:125%;fill:#000000" transform="translate(2745 74.666)">
<flowRegion id="flowRegion3331-4-2-5-9-3-4">
<rect id="rect3333-2-1-7-5-1-1" y="-1200.4" width="288.84" x="-691.32" height="250.96"/>
</flowRegion>
<flowPara id="flowPara3611-9-4" style="font-size:220px;font-weight:bold">Hit</flowPara>
</flowRoot>
<g id="g3579" transform="matrix(.38287 0 0 .38287 239.73 585.89)">
<path id="path3007" d="m-565.54-286.65 6.1004-89.981 150.68-85.405 155.86 91.506 0.91503 95.166-158.91 83.575-155.25-86.93z" style="stroke:#000000;stroke-width:5.8303;fill:none" inkscape:connector-curvature="0"/>
<path id="path3009" d="m-256.96-274.7-53.92 21.137-102.23 48.744-106.55-51.763 110-203.17 100.94 203.6" style="stroke:#000000;stroke-width:2.9152;fill:none" inkscape:connector-curvature="0"/>
<path id="path3017" d="m-565.82-280.74 46.587 23.725" style="stroke:#000000;stroke-width:2.9152;fill:none" inkscape:connector-curvature="0"/>
</g>
<g id="g3584" transform="matrix(.35906 0 0 .35906 227.8 591.51)">
<g id="g3034" transform="translate(-1094.9 127.23)">
<path id="path2989" sodipodi:nodetypes="cccccc" style="stroke:#000000;stroke-width:6;fill:none" inkscape:connector-curvature="0" d="m1176.4-341.82-229.98-18.579 2.0085-260.61 240.52 14.562 15.566 68.29z"/>
<path id="path2991" sodipodi:nodetypes="ccccc" style="stroke:#000000;stroke-width:2;fill:none" inkscape:connector-curvature="0" d="m947.44-360.91 9.5406-27.617 95.405-12.553 58.248-99.925 92.895-36.154"/>
<path id="path2993" style="stroke:#000000;stroke-width:2;fill:none" inkscape:connector-curvature="0" d="m1112.1-501.5-158.63-119.51"/>
<path id="path2995" style="stroke:#000000;stroke-width:2;fill:none" inkscape:connector-curvature="0" d="m956.48-387.02-5.5235-231.48"/>
<path id="path2997" style="stroke:#000000;stroke-width:2;fill:none" inkscape:connector-curvature="0" d="m1053.4-401.08 123.52 58.248"/>
</g>
</g>
<g id="g3592" transform="matrix(.34290 0 0 .34290 201.53 549.71)">
<g id="g3041" transform="translate(-837.05 478.79)">
<path id="path2999" style="stroke:#000000;stroke-width:10;fill:none" inkscape:connector-curvature="0" d="m310.86-215.78 32.639-179.76 181.77-94.401 160.68 138.59-22.596 178.26-185.79 90.384z"/>
<path id="path3001" style="stroke:#000000;stroke-width:2;fill:none" inkscape:connector-curvature="0" d="m313.37-215.78 164.2 24.102 182.78 15.064"/>
<path id="path3003" style="stroke:#000000;stroke-width:2;fill:none" inkscape:connector-curvature="0" d="m476.06-82.71 4.0171-108.96-92.393-200.35 230.48 25.609-137.58 175.24"/>
<path id="path3005" sodipodi:nodetypes="ccccc" style="stroke:#000000;stroke-width:2;fill:none" inkscape:connector-curvature="0" d="m315.38-217.28 72.307-175.75 138.59-92.393 91.388 118 44.69 188.3"/>
<path id="path3007-1" style="stroke:#000000;stroke-width:2;fill:none" inkscape:connector-curvature="0" d="m345-394.54 46.196 2.0085"/>
<path id="path3009-7" style="stroke:#000000;stroke-width:2;fill:none" inkscape:connector-curvature="0" d="m616.66-367.92 69.294 19.081"/>
</g>
</g>
<g id="g3242" transform="matrix(.25983 0 0 .25983 477.3 823.96)">
<g id="g3210" transform="matrix(.91589 0 0 .91589 -381.67 -74.793)">
<path id="path3172" sodipodi:rx="31.808037" sodipodi:ry="31.808037" style="stroke:#000000;stroke-width:16;fill:#000000" sodipodi:type="arc" d="m-1044.6-963.58c0 17.567-14.241 31.808-31.808 31.808s-31.808-14.241-31.808-31.808 14.241-31.808 31.808-31.808 31.808 14.241 31.808 31.808z" transform="translate(336.5 -20.089)" sodipodi:cy="-963.58374" sodipodi:cx="-1076.4509"/>
<path id="path3172-5" sodipodi:rx="31.808037" sodipodi:ry="31.808037" style="stroke:#000000;stroke-width:16;fill:#000000" sodipodi:type="arc" d="m-1044.6-963.58c0 17.567-14.241 31.808-31.808 31.808s-31.808-14.241-31.808-31.808 14.241-31.808 31.808-31.808 31.808 14.241 31.808 31.808z" transform="translate(336.5 111.33)" sodipodi:cy="-963.58374" sodipodi:cx="-1076.4509"/>
<path id="path3172-5-5" sodipodi:rx="31.808037" sodipodi:ry="31.808037" style="stroke:#000000;stroke-width:16;fill:#000000" sodipodi:type="arc" d="m-1044.6-963.58c0 17.567-14.241 31.808-31.808 31.808s-31.808-14.241-31.808-31.808 14.241-31.808 31.808-31.808 31.808 14.241 31.808 31.808z" transform="translate(336.5 242.75)" sodipodi:cy="-963.58374" sodipodi:cx="-1076.4509"/>
</g>
<g id="g3210-1" transform="matrix(.91589 0 0 .91589 -192.21 -74.793)">
<path id="path3172-7" sodipodi:rx="31.808037" sodipodi:ry="31.808037" style="stroke:#000000;stroke-width:16;fill:#000000" sodipodi:type="arc" d="m-1044.6-963.58c0 17.567-14.241 31.808-31.808 31.808s-31.808-14.241-31.808-31.808 14.241-31.808 31.808-31.808 31.808 14.241 31.808 31.808z" transform="translate(336.5 -20.089)" sodipodi:cy="-963.58374" sodipodi:cx="-1076.4509"/>
<path id="path3172-5-1" sodipodi:rx="31.808037" sodipodi:ry="31.808037" style="stroke:#000000;stroke-width:16;fill:#000000" sodipodi:type="arc" d="m-1044.6-963.58c0 17.567-14.241 31.808-31.808 31.808s-31.808-14.241-31.808-31.808 14.241-31.808 31.808-31.808 31.808 14.241 31.808 31.808z" transform="translate(336.5 111.33)" sodipodi:cy="-963.58374" sodipodi:cx="-1076.4509"/>
<path id="path3172-5-5-1" sodipodi:rx="31.808037" sodipodi:ry="31.808037" style="stroke:#000000;stroke-width:16;fill:#000000" sodipodi:type="arc" d="m-1044.6-963.58c0 17.567-14.241 31.808-31.808 31.808s-31.808-14.241-31.808-31.808 14.241-31.808 31.808-31.808 31.808 14.241 31.808 31.808z" transform="translate(336.5 242.75)" sodipodi:cy="-963.58374" sodipodi:cx="-1076.4509"/>
</g>
</g>
<path id="path3073" style="stroke:#000000;stroke-width:3.2246;fill:#ff0000" inkscape:connector-curvature="0" d="m1.6123 100.14 4.0557 3.8171h112.37l2.5592-4.4327-55.283-97.914h-4.5329z"/>
<flowRoot id="flowRoot3329" xml:space="preserve" style="letter-spacing:0px;color:#000000;word-spacing:0px;line-height:125%;fill:#000000" transform="matrix(.25983 0 0 .25983 588.84 503.3)">
<flowRegion id="flowRegion3331">
<rect id="rect3333" y="-1096.2" width="421.42" x="-643.97" height="303.05"/>
</flowRegion>
<flowPara id="flowPara3391" style="font-size:220px;font-weight:bold">D4</flowPara>
</flowRoot>
<g id="g3129" transform="matrix(.19571 0 0 .19571 523.21 201.56)">
<path id="path3073-2" d="m-2354.9-392.57-296.96 338.75-1.0158-1.2344c100.54 117.51 199.33 237.47 298.62 356.38l3.2576-0.0829c98.3-117.58 189.88-243.49 288.16-360.29l-288.62-333.37z" sodipodi:nodetypes="cccccccc" style="stroke:#000000;stroke-width:16;fill:#ff0000" inkscape:connector-curvature="0"/>
<path id="path3105" d="m-2650.5-53.343 587.74-4.7351" style="stroke:#000000;stroke-width:6;fill:#ff0000" inkscape:connector-curvature="0"/>
</g>
<flowRoot id="flowRoot3329-5" xml:space="preserve" style="letter-spacing:0px;color:#000000;word-spacing:0px;line-height:125%;fill:#000000" transform="matrix(.25983 0 0 .25983 762.98 504.82)">
<flowRegion id="flowRegion3331-2">
<rect id="rect3333-7" y="-1096.2" width="279.37" x="-643.97" height="222.55"/>
</flowRegion>
<flowPara id="flowPara3337-6" style="font-size:200px;font-weight:bold">D8</flowPara>
</flowRoot>
<rect id="rect3075" style="stroke:#000000;stroke-width:3.1257;fill:#ff0000" rx="6.3636" ry="9.4969" height="95.104" width="91.404" y="10.349" x="167.39"/>
<flowRoot id="flowRoot3329-1" xml:space="preserve" style="letter-spacing:0px;color:#000000;word-spacing:0px;line-height:125%;fill:#000000" transform="matrix(.25983 0 0 .25983 675.87 501.87)">
<flowRegion id="flowRegion3331-4">
<rect id="rect3333-2" y="-1096.2" width="312.52" x="-643.97" height="227.28"/>
</flowRegion>
<flowPara id="flowPara3391-3" style="font-size:220px;font-weight:bold">D6</flowPara>
</flowRoot>
<g id="g3028" style="fill:#ff0000" transform="matrix(.18846 0 0 .18846 58.843 93.476)">
<path id="path2999-4" d="m531.52 523.73 19.011-70.352 277.45-258.73h9.4784l282.8 263.72 23.945 90.327-310.5 292.66-8.8497-0.47531-301.66-290.1z" sodipodi:nodetypes="cccccccccc" style="stroke:#000000;stroke-width:16;fill:#ff0000" inkscape:connector-curvature="0"/>
<path id="path3001-0" d="m519.04 547.65 111.3-61.37 199.64-291.63 198.72 300.99-200.72 95.89-199.72-107.33" sodipodi:nodetypes="cccccc" style="stroke:#000000;stroke-width:6;fill:#ff0000" inkscape:connector-curvature="0"/>
<path id="path3003-9" d="m1028.7 493.56 114.42 54.092" style="stroke:#000000;stroke-width:6;fill:#ff0000" inkscape:connector-curvature="0"/>
<path id="path3005-4" d="m828.72 591.66-0.73554 250.68" sodipodi:nodetypes="cc" style="stroke:#000000;stroke-width:5.6871;fill:#ff0000" inkscape:connector-curvature="0"/>
</g>
<flowRoot id="flowRoot3329-1-2" xml:space="preserve" style="letter-spacing:0px;color:#000000;word-spacing:0px;line-height:125%;fill:#000000" transform="matrix(.25983 0 0 .25983 846.66 499.81)">
<flowRegion id="flowRegion3331-4-2">
<rect id="rect3333-2-1" y="-1096.2" width="411.95" x="-643.97" height="250.96"/>
</flowRegion>
<flowPara id="flowPara3391-3-6" style="font-size:220px;font-weight:bold">D10</flowPara>
</flowRoot>
<path id="path3283" sodipodi:nodetypes="ccccccccccc" style="stroke:#000000;stroke-width:4.9521;fill:#ff0000" inkscape:connector-curvature="0" d="m66.604 384.13 33.97-8.3455 23.883-36.237-2.749-31.304-22.247-26.861-32.307-6.8007-34.44 7.5108-21.433 27.662-3.1143 30.043 21.983 35.539z"/>
<path id="path3285" sodipodi:nodetypes="cccccc" style="stroke:#000000;stroke-width:1.7613;fill:#ff0000" inkscape:connector-curvature="0" d="m33.765 323.86 10.228 36.563 43.896 0.16485 10.249-36.599-30.919-23.74z"/>
<path id="path3287" style="stroke:#000000;stroke-width:1.857;fill:#ff0000" inkscape:connector-curvature="0" d="m67.154 274.95-0.18318 25.83"/>
<path id="path3289" sodipodi:nodetypes="cc" style="stroke:#000000;stroke-width:1.857;fill:#ff0000" inkscape:connector-curvature="0" d="m34.287 325.37-24.377-15.72"/>
<path id="path3291" sodipodi:nodetypes="cc" style="stroke:#000000;stroke-width:1.857;fill:#ff0000" inkscape:connector-curvature="0" d="m44.233 360.16-14.45 16.64"/>
<path id="path3293" sodipodi:nodetypes="cc" style="stroke:#000000;stroke-width:1.857;fill:#ff0000" inkscape:connector-curvature="0" d="m87.683 360.71 13.267 15.263"/>
<path id="path3295" sodipodi:nodetypes="cc" style="stroke:#000000;stroke-width:1.857;fill:#ff0000" inkscape:connector-curvature="0" d="m98.251 324.45 22.939-15.93"/>
<flowRoot id="flowRoot3329-1-2-8" xml:space="preserve" style="letter-spacing:0px;color:#000000;word-spacing:0px;line-height:125%;fill:#000000" transform="matrix(.25983 0 0 .25983 966.57 498.37)">
<flowRegion id="flowRegion3331-4-2-5">
<rect id="rect3333-2-1-7" y="-1096.2" width="411.95" x="-643.97" height="250.96"/>
</flowRegion>
<flowPara id="flowPara3391-3-6-6" style="font-size:220px;font-weight:bold">D12</flowPara>
</flowRoot>
<g id="g3162" transform="matrix(.25983 0 0 .25983 463.76 280.15)">
<path id="path3007-8" d="m-1160.8 71.357 208.07-122.82 208.03 122.23-11.16 232.13-197.46 122.23-196.88-119.29z" style="stroke:#000000;stroke-width:16;fill:#ff0000" inkscape:connector-curvature="0"/>
<g id="g3032" style="fill:#ff0000" transform="matrix(.39948 0 0 .39948 -1174.3 -120.6)">
<path id="path3017-8" inkscape:connector-curvature="0" sodipodi:nodetypes="cccccccccccccccc" style="stroke:#000000;stroke-width:8;fill:none" d="m560.49 177.48-4.4133 214.78m-314.82 594.33 639.93 7.35m-817.93 70.66 179.47-76.54 310.4 373.64 325.11-370.7 142.56 48.4m-960.32-541.11 497.07-104.55 491.15 106.02-177.81 489.77-317.76-597.27-314.81 592.86z"/>
</g>
</g>
<flowRoot id="flowRoot3329-1-2-8-1" xml:space="preserve" style="letter-spacing:0px;color:#000000;word-spacing:0px;line-height:125%;fill:#000000" transform="matrix(.25983 0 0 .25983 1080.1 499.13)">
<flowRegion id="flowRegion3331-4-2-5-8">
<rect id="rect3333-2-1-7-9" y="-1096.2" width="411.95" x="-643.97" height="250.96"/>
</flowRegion>
<flowPara id="flowPara3391-3-6-6-2" style="font-size:220px;font-weight:bold">D20</flowPara>
</flowRoot>
<flowRoot id="flowRoot3329-1-2-8-7" xml:space="preserve" style="letter-spacing:0px;color:#000000;word-spacing:0px;line-height:125%;fill:#000000" transform="matrix(.25983 0 0 .25983 469.73 316.56)">
<flowRegion id="flowRegion3331-4-2-5-9">
<rect id="rect3333-2-1-7-5" y="-1200.4" width="288.84" x="-691.32" height="250.96"/>
</flowRegion>
<flowPara id="flowPara3611" style="font-size:220px;font-weight:bold">1</flowPara>
</flowRoot>
<flowRoot id="flowRoot3329-1-2-8-7-3" xml:space="preserve" style="letter-spacing:0px;color:#000000;word-spacing:0px;line-height:125%;fill:#000000" transform="matrix(.25983 0 0 .25983 529.34 316.56)">
<flowRegion id="flowRegion3331-4-2-5-9-1">
<rect id="rect3333-2-1-7-5-2" y="-1200.4" width="288.84" x="-691.32" height="250.96"/>
</flowRegion>
<flowPara id="flowPara3611-3" style="font-size:220px;font-weight:bold">2</flowPara>
</flowRoot>
<flowRoot id="flowRoot3329-1-2-8-7-34" xml:space="preserve" style="letter-spacing:0px;color:#000000;word-spacing:0px;line-height:125%;fill:#000000" transform="matrix(.25983 0 0 .25983 594.64 315.86)">
<flowRegion id="flowRegion3331-4-2-5-9-11">
<rect id="rect3333-2-1-7-5-3" y="-1200.4" width="288.84" x="-691.32" height="250.96"/>
</flowRegion>
<flowPara id="flowPara3611-8" style="font-size:220px;font-weight:bold">3</flowPara>
</flowRoot>
<flowRoot id="flowRoot3329-1-2-8-7-7" xml:space="preserve" style="letter-spacing:0px;color:#000000;word-spacing:0px;line-height:125%;fill:#000000" transform="matrix(.25983 0 0 .25983 637.31 382.27)">
<flowRegion id="flowRegion3331-4-2-5-9-4">
<rect id="rect3333-2-1-7-5-27" y="-1200.4" width="288.84" x="-691.32" height="250.96"/>
</flowRegion>
<flowPara id="flowPara3611-7" style="font-size:220px;font-weight:bold">14</flowPara>
</flowRoot>
<flowRoot id="flowRoot3329-1-2-8-7-9" xml:space="preserve" style="letter-spacing:0px;color:#000000;word-spacing:0px;line-height:125%;fill:#000000" transform="matrix(.25983 0 0 .25983 720.27 381.86)">
<flowRegion id="flowRegion3331-4-2-5-9-3">
<rect id="rect3333-2-1-7-5-1" y="-1200.4" width="288.84" x="-691.32" height="250.96"/>
</flowRegion>
<flowPara id="flowPara3611-9" style="font-size:220px;font-weight:bold">15</flowPara>
</flowRoot>
<flowRoot id="flowRoot3329-1-2-8-7-8" xml:space="preserve" style="letter-spacing:0px;color:#000000;word-spacing:0px;line-height:125%;fill:#000000" transform="matrix(.25983 0 0 .25983 803.23 381.97)">
<flowRegion id="flowRegion3331-4-2-5-9-6">
<rect id="rect3333-2-1-7-5-5" y="-1200.4" width="288.84" x="-691.32" height="250.96"/>
</flowRegion>
<flowPara id="flowPara3611-0" style="font-size:220px;font-weight:bold">16</flowPara>
</flowRoot>
<flowRoot id="flowRoot3329-1-2-8-7-2" xml:space="preserve" style="letter-spacing:0px;color:#000000;word-spacing:0px;line-height:125%;fill:#000000" transform="matrix(.25983 0 0 .25983 886.19 382.38)">
<flowRegion id="flowRegion3331-4-2-5-9-8">
<rect id="rect3333-2-1-7-5-6" y="-1200.4" width="288.84" x="-691.32" height="250.96"/>
</flowRegion>
<flowPara id="flowPara3611-02" style="font-size:220px;font-weight:bold">17</flowPara>
</flowRoot>
<flowRoot id="flowRoot3329-1-2-8-7-4" xml:space="preserve" style="letter-spacing:0px;color:#000000;word-spacing:0px;line-height:125%;fill:#000000" transform="matrix(.25983 0 0 .25983 969.15 381.74)">
<flowRegion id="flowRegion3331-4-2-5-9-86">
<rect id="rect3333-2-1-7-5-50" y="-1200.4" width="288.84" x="-691.32" height="250.96"/>
</flowRegion>
<flowPara id="flowPara3611-90" style="font-size:220px;font-weight:bold">18</flowPara>
</flowRoot>
<flowRoot id="flowRoot3329-1-2-8-7-0" xml:space="preserve" style="letter-spacing:0px;color:#000000;word-spacing:0px;line-height:125%;fill:#000000" transform="matrix(.25983 0 0 .25983 1052.1 381.79)">
<flowRegion id="flowRegion3331-4-2-5-9-61">
<rect id="rect3333-2-1-7-5-38" y="-1200.4" width="288.84" x="-691.32" height="250.96"/>
</flowRegion>
<flowPara id="flowPara3611-93" style="font-size:220px;font-weight:bold">19</flowPara>
</flowRoot>
<flowRoot id="flowRoot3329-1-2-8-7-44" xml:space="preserve" style="letter-spacing:0px;color:#000000;word-spacing:0px;line-height:125%;fill:#000000" transform="matrix(.25983 0 0 .25983 1138.2 382.08)">
<flowRegion id="flowRegion3331-4-2-5-9-60">
<rect id="rect3333-2-1-7-5-66" y="-1200.4" width="288.84" x="-691.32" height="250.96"/>
</flowRegion>
<flowPara id="flowPara3611-1" style="font-size:220px;font-weight:bold">20</flowPara>
</flowRoot>
<flowRoot id="flowRoot3329-1-2-8-7-34-8" xml:space="preserve" style="letter-spacing:0px;color:#000000;word-spacing:0px;line-height:125%;fill:#000000" transform="matrix(.25983 0 0 .25983 661.45 316.56)">
<flowRegion id="flowRegion3331-4-2-5-9-11-4">
<rect id="rect3333-2-1-7-5-3-9" y="-1200.4" width="288.84" x="-691.32" height="250.96"/>
</flowRegion>
<flowPara id="flowPara3611-8-6" style="font-size:220px;font-weight:bold">4</flowPara>
</flowRoot>
<flowRoot id="flowRoot3329-1-2-8-7-34-3" xml:space="preserve" style="letter-spacing:0px;color:#000000;word-spacing:0px;line-height:125%;fill:#000000" transform="matrix(.25983 0 0 .25983 727.92 315.86)">
<flowRegion id="flowRegion3331-4-2-5-9-11-7">
<rect id="rect3333-2-1-7-5-3-8" y="-1200.4" width="288.84" x="-691.32" height="250.96"/>
</flowRegion>
<flowPara id="flowPara3611-8-8" style="font-size:220px;font-weight:bold">5</flowPara>
</flowRoot>
<flowRoot id="flowRoot3329-1-2-8-7-34-2" xml:space="preserve" style="letter-spacing:0px;color:#000000;word-spacing:0px;line-height:125%;fill:#000000" transform="matrix(.25983 0 0 .25983 794.08 315.86)">
<flowRegion id="flowRegion3331-4-2-5-9-11-9">
<rect id="rect3333-2-1-7-5-3-1" y="-1200.4" width="288.84" x="-691.32" height="250.96"/>
</flowRegion>
<flowPara id="flowPara3611-8-3" style="font-size:220px;font-weight:bold">6</flowPara>
</flowRoot>
<flowRoot id="flowRoot3329-1-2-8-7-34-5" xml:space="preserve" style="letter-spacing:0px;color:#000000;word-spacing:0px;line-height:125%;fill:#000000" transform="matrix(.25983 0 0 .25983 859.94 316.56)">
<flowRegion id="flowRegion3331-4-2-5-9-11-98">
<rect id="rect3333-2-1-7-5-3-4" y="-1200.4" width="288.84" x="-691.32" height="250.96"/>
</flowRegion>
<flowPara id="flowPara3611-8-0" style="font-size:220px;font-weight:bold">7</flowPara>
</flowRoot>
<flowRoot id="flowRoot3329-1-2-8-7-34-7" xml:space="preserve" style="letter-spacing:0px;color:#000000;word-spacing:0px;line-height:125%;fill:#000000" transform="matrix(.25983 0 0 .25983 925.41 315.83)">
<flowRegion id="flowRegion3331-4-2-5-9-11-6">
<rect id="rect3333-2-1-7-5-3-3" y="-1200.4" width="288.84" x="-691.32" height="250.96"/>
</flowRegion>
<flowPara id="flowPara3611-8-61" style="font-size:220px;font-weight:bold">8</flowPara>
</flowRoot>
<flowRoot id="flowRoot3329-1-2-8-7-34-54" xml:space="preserve" style="letter-spacing:0px;color:#000000;word-spacing:0px;line-height:125%;fill:#000000" transform="matrix(.25983 0 0 .25983 991.35 315.83)">
<flowRegion id="flowRegion3331-4-2-5-9-11-2">
<rect id="rect3333-2-1-7-5-3-0" y="-1200.4" width="288.84" x="-691.32" height="250.96"/>
</flowRegion>
<flowPara id="flowPara3611-8-9" style="font-size:220px;font-weight:bold">9</flowPara>
</flowRoot>
<flowRoot id="flowRoot3329-1-2-8-7-34-73" xml:space="preserve" style="letter-spacing:0px;color:#000000;word-spacing:0px;line-height:125%;fill:#000000" transform="matrix(.25983 0 0 .25983 1054.5 315.86)">
<flowRegion id="flowRegion3331-4-2-5-9-11-72">
<rect id="rect3333-2-1-7-5-3-6" y="-1200.4" width="288.84" x="-691.32" height="250.96"/>
</flowRegion>
<flowPara id="flowPara3611-8-01" style="font-size:220px;font-weight:bold">10</flowPara>
</flowRoot>
<flowRoot id="flowRoot3329-1-2-8-7-34-6" xml:space="preserve" style="letter-spacing:0px;color:#000000;word-spacing:0px;line-height:125%;fill:#000000" transform="matrix(.25983 0 0 .25983 1149.3 316.56)">
<flowRegion id="flowRegion3331-4-2-5-9-11-5">
<rect id="rect3333-2-1-7-5-3-7" y="-1200.4" width="288.84" x="-691.32" height="250.96"/>
</flowRegion>
<flowPara id="flowPara3611-8-5" style="font-size:220px;font-weight:bold">11</flowPara>
</flowRoot>
<flowRoot id="flowRoot3329-1-2-8-7-34-4" xml:space="preserve" style="letter-spacing:0px;color:#000000;word-spacing:0px;line-height:125%;fill:#000000" transform="matrix(.25983 0 0 .25983 471.39 382.49)">
<flowRegion id="flowRegion3331-4-2-5-9-11-1">
<rect id="rect3333-2-1-7-5-3-2" y="-1200.4" width="288.84" x="-691.32" height="250.96"/>
</flowRegion>
<flowPara id="flowPara3611-8-00" style="font-size:220px;font-weight:bold">12</flowPara>
</flowRoot>
<flowRoot id="flowRoot3329-1-2-8-7-34-1" xml:space="preserve" style="letter-spacing:0px;color:#000000;word-spacing:0px;line-height:125%;fill:#000000" transform="matrix(.25983 0 0 .25983 554.35 382.19)">
<flowRegion id="flowRegion3331-4-2-5-9-11-46">
<rect id="rect3333-2-1-7-5-3-07" y="-1200.4" width="288.84" x="-691.32" height="250.96"/>
</flowRegion>
<flowPara id="flowPara3611-8-1" style="font-size:220px;font-weight:bold">13</flowPara>
</flowRoot>
<flowRoot id="flowRoot3329-1-2-8-7-7-7" xml:space="preserve" style="letter-spacing:0px;color:#000000;word-spacing:0px;line-height:125%;fill:#000000" transform="matrix(.25983 0 0 .25983 637.66 450.97)">
<flowRegion id="flowRegion3331-4-2-5-9-4-7">
<rect id="rect3333-2-1-7-5-27-7" y="-1200.4" width="288.84" x="-691.32" height="250.96"/>
</flowRegion>
<flowPara id="flowPara3611-7-7" style="font-size:220px;font-weight:bold">40</flowPara>
</flowRoot>
<flowRoot id="flowRoot3329-1-2-8-7-9-3" xml:space="preserve" style="letter-spacing:0px;color:#000000;word-spacing:0px;line-height:125%;fill:#000000" transform="matrix(.25983 0 0 .25983 720.62 450.56)">
<flowRegion id="flowRegion3331-4-2-5-9-3-3">
<rect id="rect3333-2-1-7-5-1-5" y="-1200.4" width="288.84" x="-691.32" height="250.96"/>
</flowRegion>
<flowPara id="flowPara3611-9-9" style="font-size:220px;font-weight:bold">50</flowPara>
</flowRoot>
<flowRoot id="flowRoot3329-1-2-8-7-8-9" xml:space="preserve" style="letter-spacing:0px;color:#000000;word-spacing:0px;line-height:125%;fill:#000000" transform="matrix(.25983 0 0 .25983 803.58 450.67)">
<flowRegion id="flowRegion3331-4-2-5-9-6-8">
<rect id="rect3333-2-1-7-5-5-1" y="-1200.4" width="288.84" x="-691.32" height="250.96"/>
</flowRegion>
<flowPara id="flowPara3611-0-8" style="font-size:220px;font-weight:bold">60</flowPara>
</flowRoot>
<flowRoot id="flowRoot3329-1-2-8-7-2-2" xml:space="preserve" style="letter-spacing:0px;color:#000000;word-spacing:0px;line-height:125%;fill:#000000" transform="matrix(.25983 0 0 .25983 886.54 451.08)">
<flowRegion id="flowRegion3331-4-2-5-9-8-6">
<rect id="rect3333-2-1-7-5-6-6" y="-1200.4" width="288.84" x="-691.32" height="250.96"/>
</flowRegion>
<flowPara id="flowPara3611-02-0" style="font-size:220px;font-weight:bold">70</flowPara>
</flowRoot>
<flowRoot id="flowRoot3329-1-2-8-7-4-3" xml:space="preserve" style="letter-spacing:0px;color:#000000;word-spacing:0px;line-height:125%;fill:#000000" transform="matrix(.25983 0 0 .25983 969.5 450.44)">
<flowRegion id="flowRegion3331-4-2-5-9-86-8">
<rect id="rect3333-2-1-7-5-50-0" y="-1200.4" width="288.84" x="-691.32" height="250.96"/>
</flowRegion>
<flowPara id="flowPara3611-90-1" style="font-size:220px;font-weight:bold">80</flowPara>
</flowRoot>
<flowRoot id="flowRoot3329-1-2-8-7-0-2" xml:space="preserve" style="letter-spacing:0px;color:#000000;word-spacing:0px;line-height:125%;fill:#000000" transform="matrix(.25983 0 0 .25983 1052.5 450.49)">
<flowRegion id="flowRegion3331-4-2-5-9-61-5">
<rect id="rect3333-2-1-7-5-38-0" y="-1200.4" width="288.84" x="-691.32" height="250.96"/>
</flowRegion>
<flowPara id="flowPara3611-93-9" style="font-size:220px;font-weight:bold">90</flowPara>
</flowRoot>
<flowRoot id="flowRoot3329-1-2-8-7-44-4" xml:space="preserve" style="letter-spacing:0px;color:#000000;word-spacing:0px;line-height:125%;fill:#000000" transform="matrix(.25983 0 0 .25983 1138.5 450.78)">
<flowRegion id="flowRegion3331-4-2-5-9-60-7">
<rect id="rect3333-2-1-7-5-66-8" y="-1200.4" width="288.84" x="-691.32" height="250.96"/>
</flowRegion>
<flowPara id="flowPara3611-1-3" style="font-size:220px;font-weight:bold"> 0</flowPara>
</flowRoot>
<flowRoot id="flowRoot3329-1-2-8-7-34-4-5" xml:space="preserve" style="letter-spacing:0px;color:#000000;word-spacing:0px;line-height:125%;fill:#000000" transform="matrix(.25983 0 0 .25983 471.74 451.19)">
<flowRegion id="flowRegion3331-4-2-5-9-11-1-1">
<rect id="rect3333-2-1-7-5-3-2-2" y="-1200.4" width="288.84" x="-691.32" height="250.96"/>
</flowRegion>
<flowPara id="flowPara3611-8-00-0" style="font-size:220px;font-weight:bold">00</flowPara>
</flowRoot>
<flowRoot id="flowRoot3329-1-2-8-7-34-1-1" xml:space="preserve" style="letter-spacing:0px;color:#000000;word-spacing:0px;line-height:125%;fill:#000000" transform="matrix(.25983 0 0 .25983 554.7 450.89)">
<flowRegion id="flowRegion3331-4-2-5-9-11-46-6">
<rect id="rect3333-2-1-7-5-3-07-4" y="-1200.4" width="288.84" x="-691.32" height="250.96"/>
</flowRegion>
<flowPara id="flowPara3611-8-1-0" style="font-size:220px;font-weight:bold">30</flowPara>
</flowRoot>
<flowRoot id="flowRoot3329-1-2-8-7-7-6" xml:space="preserve" style="letter-spacing:0px;color:#000000;word-spacing:0px;line-height:125%;fill:#000000" transform="matrix(.25983 0 0 .25983 558.19 623.85)">
<flowRegion id="flowRegion3331-4-2-5-9-4-1">
<rect id="rect3333-2-1-7-5-27-8" y="-1200.4" width="374.07" x="-691.32" height="303.05"/>
</flowRegion>
<flowPara id="flowPara3611-7-9" style="font-size:300px;font-weight:bold">*</flowPara>
</flowRoot>
<flowRoot id="flowRoot3329-1-2-8-7-8-3" xml:space="preserve" style="letter-spacing:0px;color:#000000;word-spacing:0px;line-height:125%;fill:#000000" transform="matrix(.25983 0 0 .25983 487.23 618.05)">
<flowRegion id="flowRegion3331-4-2-5-9-6-9">
<rect id="rect3333-2-1-7-5-5-8" y="-1200.4" width="288.84" x="-691.32" height="250.96"/>
</flowRegion>
<flowPara id="flowPara3611-0-80" style="font-size:220px;font-weight:bold">X</flowPara>
</flowRoot>
<flowRoot id="flowRoot3329-1-2-8-7-34-4-9" xml:space="preserve" style="letter-spacing:0px;color:#000000;word-spacing:0px;line-height:125%;fill:#000000" transform="matrix(.25983 0 0 .25983 466.81 522.55)">
<flowRegion id="flowRegion3331-4-2-5-9-11-1-6">
<rect id="rect3333-2-1-7-5-3-2-8" ry="0" height="298.31" width="255.7" y="-1205.2" x="-691.32"/>
</flowRegion>
<flowPara id="flowPara3611-8-00-3" style="font-size:300px;font-weight:bold"> - </flowPara>
</flowRoot>
<flowRoot id="flowRoot3329-1-2-8-7-34-1-4" xml:space="preserve" style="letter-spacing:0px;color:#000000;word-spacing:0px;line-height:125%;fill:#000000" transform="matrix(.25983 0 0 .25983 539.31 524.4)">
<flowRegion id="flowRegion3331-4-2-5-9-11-46-8">
<rect id="rect3333-2-1-7-5-3-07-49" y="-1200.4" width="303.05" x="-691.32" height="307.78"/>
</flowRegion>
<flowPara id="flowPara3611-8-1-9" style="font-size:300px;font-weight:bold">+</flowPara>
</flowRoot>
<metadata id="metadata241">
<rdf:RDF>
<cc:Work>
<dc:format>image/svg+xml</dc:format>
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
<cc:license rdf:resource="http://creativecommons.org/licenses/publicdomain/"/>
<dc:publisher>
<cc:Agent rdf:about="http://openclipart.org/">
<dc:title>Openclipart</dc:title>
</cc:Agent>
</dc:publisher>
</cc:Work>
<cc:License rdf:about="http://creativecommons.org/licenses/publicdomain/">
<cc:permits rdf:resource="http://creativecommons.org/ns#Reproduction"/>
<cc:permits rdf:resource="http://creativecommons.org/ns#Distribution"/>
<cc:permits rdf:resource="http://creativecommons.org/ns#DerivativeWorks"/>
</cc:License>
</rdf:RDF>
</metadata>
</svg>

After

Width:  |  Height:  |  Size: 31 KiB

View File

@ -11,4 +11,14 @@
height: 100%
}
}
.long-input {
width: 100%;
max-width: 100%;
min-width: 100%;
}
.short-input {
width: 50px;
max-width: 50px;
min-width: 50px;
}
}

24
less/rmfrp.less Normal file
View File

@ -0,0 +1,24 @@
// Actor Sheet
@import "./actor-sheet/actor-sheet-skillcat.less";
@import "./actor-sheet/actor-sheet.less";
@import "./actor-sheet/actor-sheet-skills.less";
@import "./actor-sheet/actor-sheet-money.less";
@import "./actor-sheet/actor-sheet-items.less";
@import "./actor-sheet/actor-sheet-weapons.less";
@import "./actor-sheet/actor-sheet-armor.less";
@import "./actor-sheet/actor-sheet-herbs.less";
@import "./actor-sheet/actor-sheet-spells.less";
@import "./actor-sheet/actor-sheet-resistances.less";
//Skill Category Sheet
@import "./skillcat-sheet/skillcat-sheet.less";
@import "./skillcat-sheet/applicable-stats-grid.less";
//Apps
@import "./tools/dice-roller.less";
// Generics
@import "./item-sheet.less";

View File

@ -0,0 +1,19 @@
.applicable-stats-grid-container {
display: grid;
grid-template-columns: [app-stat-1] 33% [app-stat-2] 33% [app-stat-3] 33%;
}
.applicable-stats-grid-container > div {
font-family: Signika, sans-serif;
font-size: 12px;
text-align: center;
border-bottom: 1px solid;
padding-top: 3px;
padding-bottom: 3px;
display: flex;
justify-content: flex-end;
flex-direction: column;
justify-content: center;
}

View File

@ -0,0 +1,33 @@
//.skillcat-icons {
// display: flex;
// justify-content: space-around;
// flex-direction: row;
// align-items: center;
//}
.skillcat-name, .skill-name, .item-name, .spell-name, .equipable-name {
font-family: Signika, sans-serif;
font-size: 12px;
font-weight: bold;
text-align: center;
}
.skillcat-entry, .skill-entry, .item-entry, .spell-entry, .equipable-entry {
font-family: Signika, sans-serif;
font-size: 12px;
text-align: center;
}
.skillcat-headeritem, .skill-headeritem, .item-headeritem, .spell-headeritem, .equipable-headeritem {
text-align: center;
font-weight: bold;
}
.skillcat-controls, .skill-controls, .item-controls {
font-family: Signika, sans-serif;
font-size: 12px;
text-align: center;
}
.select-fixed-width {
width: 100px;
}

View File

@ -0,0 +1,25 @@
.dice-roller-options {
display: flex;
flex-direction: column;
}
.dice-roller-item {
display: flex;
align-items: center;
margin:5px;
}
.dice-roller-item div {
flex: 1;
}
.roll-button-container {
display: flex;
flex-direction: row;
justify-content: flex-start;
}
.roll-button {
margin-top: 2px;
width: 96px;
max-width: 96px;
}

120
module/config.js Normal file
View File

@ -0,0 +1,120 @@
export const rmfrp = {};
rmfrp.currency_type = {
mp: "rmfrp.curreny_type.mp",
pp: "rmfrp.curreny_type.pp",
gp: "rmfrp.curreny_type.gp",
sp: "rmfrp.curreny_type.sp",
bp: "rmfrp.curreny_type.bp",
cp: "rmfrp.curreny_type.cp"
};
rmfrp.difficulties = {
routine: {key: "routine", label:"Routine (+30)", value: 30},
easy: {key: "easy", label:"Easy (+20)", value: 20},
light: {key: "light", label:"Light (+10)", value: 10},
medium: {key: "medium", label:"Medium (0)", value: 0},
hard: {key: "hard", label:"Hard (-10)", value: -10},
very_hard: {key: "very_hard", label:"Very Hard (-20)", value: -20},
extremely_hard: {key: "extremely_hard", label:"Extremely Hard (-30)", value: -30},
sheer_folly: {key: "sheer_folly", label:"Sheer Folly (-50)", value: -50},
absurd: {key: "absurd", label:"Absurd (-70)", value: -70},
};
rmfrp.gameSystems = [
{key: "common", label:"Common"},
{key: "merp", label:"Middle Earth Role Playing (MERP)"},
{key: "rmfrp", label:"Rolemaster Fantasy Role Playing (RMFRP)"},
];
rmfrp.combatSituations = [
{key: "none", label:"None (0)", modifier: 0},
{key: "melee", label:"Melee environment (-20)", modifier: -20},
{key: "missile", label:"Under missile fire (-10)", modifier: -10},
];
rmfrp.rankBonusProgressionList = [
{key: "standard", label:"Standard"},
{key: "limited", label:"Limited"},
{key: "combined", label:"Combined"},
{key: "race", label:"Linked to Race"},
]
rmfrp.lightOrDarknessModifiers = [
{key: "none", label:"None", modifierLight: 0, modifierDark: 0},
{key: "noshadows", label:"No shadows", modifierLight: 10, modifierDark: -30},
{key: "lightshadows", label:"Light shadows", modifierLight: 5, modifierDark: -20},
{key: "mediumshadows", label:"Medium shadows", modifierLight: 0, modifierDark: 0},
{key: "heavyshadows", label:"Heavy shadows", modifierLight: -10, modifierDark: 10},
{key: "dark", label:"Darkness", modifierLight: -25, modifierDark: 30},
{key: "pitchblack", label:"Pitch black", modifierLight: -40, modifierDark: 40},
]
rmfrp.hitsPerRound = [
{key: "none", label:"None", modifier: 0},
{key: "one", label:"One", modifier: -5},
{key: "two", label:"Two", modifier: -10},
{key: "three", label:"Three", modifier: -20},
{key: "four", label:"Four", modifier: -25},
{key: "five", label:"Five", modifier: -30},
{key: "six", label:"Six", modifier: -35},
{key: "seven", label:"Seven", modifier: -40},
{key: "eight", label:"Eight", modifier: -45},
{key: "nine", label:"Nine", modifier: -50},
{key: "ten", label:"Ten", modifier: -55},
{key: "eleven", label:"Eleven", modifier: -60},
{key: "twelve", label:"Twelve", modifier: -65},
{key: "thirteen", label:"Thirteen", modifier: -70},
{key: "fourteen", label:"Fourteen", modifier: -75},
{key: "fifteen", label:"Fifteen", modifier: -80}
];
rmfrp.stats = {
agility: {
fullname: "Agility",
shortname: "Ag"
},
constitution: {
fullname: "Constitution",
shortname: "Co"
},
memory: {
fullname: "Memory",
shortname: "Me"
},
reasoning: {
fullname: "Reasoning",
shortname: "Re"
},
self_discipline: {
fullname: "Self Discipline",
shortname: "SD"
},
empathy: {
fullname: "Empathy",
shortname: "Em"
},
intuition: {
fullname: "Intuition",
shortname: "In"
},
presence: {
fullname: "Presence",
shortname: "Pr"
},
quickness: {
fullname: "Quickness",
shortname: "Qu"
},
strength: {
fullname: "Strength",
shortname: "St"
}
};
rmfrp.skill_designations = {
None: "None",
Occupational: "Occupational",
Everyman: "Everyman",
Restricted: "Restricted"
};

26
module/controls.js vendored Normal file
View File

@ -0,0 +1,26 @@
export function registerGetSceneControlButtonsHook() {
Hooks.on("getSceneControlButtons", getSceneControlButtons);
}
function getSceneControlButtons(controls) {
if (canvas == null) {
return;
}
controls.push({
name: "fvtt-rolemaster-frp",
title: "Rolemaster FRP System",
icon: "fas fa-r",
layer: "ControlsLayer",
tools: [
{
name: "rmfrpdiceroller",
title: "Dice Roller",
icon: "fas fa-dice",
onClick: () => { return new game.rmfrp.applications.RMSSToolsDiceRoller().render(true); },
button: true
}
],
activeTool: "rmfrpdiceroller"
});
}

View File

@ -0,0 +1,20 @@
// Parse all the JSON files in the tables directory and create a JS file with the tables
// Create on one object per table with file name as ket and the table data in a field table
// This is a one-time script to create the tables.js file
// Run this script with `node create-js-table.js`
const fs = require('fs');
const path = require('path');
const tablesDir = path.join(__dirname, './');
const tables = {};
fs.readdirSync(tablesDir).forEach(file => {
const table = require(path.join(tablesDir, file));
console.log(`Processing ${file} ${table}`);
//tables[file] = table;
}
);
//fs.writeFileSync(path.join(__dirname, 'tables.js'), `module.exports = ${JSON.stringify(tables, null, 2)};`);
console.log('Tables created');a

View File

@ -0,0 +1,138 @@
local lfs = require "lfs"
local json = require "dkjson"
local _CRIT_KEYS = {"A", "B", "C", "D", "E"}
local function process_values(rest, condition)
-- Get the +XH (with X being a number)
local damage = rest:match("%+(%d*)H")
-- π = mustparry
local mustparry = false
if rest:match(" π") then
mustparry = 1
end
if rest:match(" (%d)π") then
mustparry = rest:match(" (%d*)π")
end
local mustparry_duration = false
local mustparry_value = false
local duration, value = rest:match(" (%d?)%((π%-?%d+)%)")
if duration or value then
mustparry_duration = tonumber(duration) or 1
mustparry_value = tonumber(value)
end
-- ∑ = stunned
local stunned = false
local match = rest:match(" (%d*)∑")
if match then
stunned = tonumber(match) or 1
end
-- ∏ = cannot parry
local cannot_parry = false
match = rest:match(" (%d*)∑?∏")
if match then
cannot_parry = tonumber(match) or 1
end
match = rest:match(" (%d*)∏")
if match then
cannot_parry = tonumber(match) or 1
end
-- ∫ = wounds per rounds
local wounds_per_round = false
match = rest:match(" (%d?)∫")
if match then
wounds_per_round = tonumber(match) or 1
end
-- Round penalty
local round_penalty_duration = false
local nbRounds, round_penalty_value = rest:match(" (%d?)%((%-?%d+)%)")
if nbRounds or round_penalty_value then
round_penalty_duration = tonumber(nbRounds) or 1
round_penalty_value = tonumber(round_penalty_value)
end
-- Round bonus
local round_bonus_duration = false
local nbRounds, round_bonus_value = rest:match(" (%d?)%((%+?%d+)%)")
if nbRounds or round_bonus_value then
round_bonus_duration = tonumber(nbRounds) or 1
round_bonus_value = tonumber(round_bonus_value)
end
print(rest, damage, mustparry, stunned, cannot_parry, wounds_per_round, round_penalty_duration, round_penalty_value,
round_bonus_duration, round_bonus_value)
return {
condition = condition or "none",
damage = damage,
mustparry = mustparry,
stunned = stunned,
cannot_parry = cannot_parry,
wounds_per_round = wounds_per_round,
round_penalty_duration = round_penalty_duration,
round_penalty_value = round_penalty_value,
round_bonus_duration = round_bonus_duration,
round_bonus_value = round_bonus_value,
mustparry_duration = mustparry_duration,
mustparry_value = mustparry_value
}
end
local all_criticals = {}
-- Loop thru all JSON files in the criticals_data directory
for file in lfs.dir("./") do
if file:match("json$") then
local json_file = io.open("./" .. file, "r")
local json_data = json_file:read("*a")
json_file:close()
local crit = {
name = string.match(file, "(%w+).json"),
criticals = {}
}
local rows = json.decode(json_data)
for _, c in ipairs(rows) do
local new_crit = {
score = c.Score,
levels = {}
}
for _, key in ipairs(_CRIT_KEYS) do
local effects = {}
local line = c[key]
-- Get description (ie all text befire the first \n)
local desc = line:match("([^\n]+)")
-- Get the rest of the text
local rest = line:match("\n(.+)")
if rest:match("with ") then
local reasonwith, with, reasonwithout , without = rest:match("(with[^:]*): ([^w]+)(w/o[^:]*): (.+)")
print("SPLITTEW WITH", desc)
effects[1] = process_values(with, reasonwith)
effects[2] = process_values(without, reasonwithout)
else
effects[1] = process_values(rest)
end
new_crit.levels[key] = {
key = key,
description = desc,
effects = effects
}
end
table.insert(crit.criticals, new_crit)
end
all_criticals[crit.name] = crit
end
end
-- Convert to JSON
local json_data = json.encode(all_criticals, {indent = true})
print(json_data)

View File

@ -0,0 +1,154 @@
[
{
"Score": "01-05",
"A": "Weak strike.\n+0H",
"B": "Feeble strike falls clear of target.\n+0H",
"C": "Firm shot. Good recovery. Try again.\n+1H",
"D": "Strike lands poorly.\n+2H",
"E": "Your attack is weak.\n+3H"
},
{
"Score": "06-10",
"A": "Good form, but it disappoints.\n+1H",
"B": "Hard strike with no edge. Foe steps clear before you sort it out.\n+2H",
"C": "Strike foe with more force than edge.\n+3H",
"D": "An opening appears and all you can to is smack foe lightly.\n+4H",
"E": "Unbalance foe. You receive initiative next round.\n+5H"
},
{
"Score": "11-15",
"A": "Blade misses foe's face by inches. You receive initiative next round.\n+1H",
"B": "Foe steps quickly out of your reach. You receive initiative next round.\n+3H",
"C": "Blow to foe's side yields the initiative to you next round.\n+6H",
"D": "You force your opponent back. He keeps you at bay with wild swings.\n+3H π",
"E": "You push aside foe's weapon and force him back.\n+4H π"
},
{
"Score": "16-20",
"A": "Strike passes under foe's arm. It fails to bite deep. He recoils.\n+1H π",
"B": "Blow to foe's side. Foe defends energetically.\n+2H (π-10)",
"C": "Your assault catches foe in side and forces him back 5 feet.\n+4H (π-20)",
"D": "You lean in and slash foe's side. You receive initiative next round.\n+2H (-10)",
"E": "Strong blow to foe's ribs. Foe drops his guard and almost his weapon.\n∑∏ (+10)"
},
{
"Score": "21-35",
"A": "Foe's evasion puts him out of an aggressive posture.\n+2H π (+10)",
"B": "Foe is shaken by your blow to his side. His defensive measures look clumsy.\n+2H (π-20)",
"C": "You break foe's rib with a lightning strike to his chest. He recovers quickly. His shield side still faces you.\n+3H ∑",
"D": "Arm and chest strike. Foe cannot defend himself for a moment. You step around his shielded side.\n+3H ∑∏",
"E": "Foe avoids your main effort, but you nick him on your recovery. Foe receives minor side wound and stumbles back 10 feet.\n+3H (-10)"
},
{
"Score": "36-45",
"A": "Minor thigh wound. Cut foe with the smallest of slashes.\n∫",
"B": "Strike foe in shin. If he doesn't have greaves, you slash open foe's shin.\nwith leg greaves: +2H π w/o leg greaves: +2H ∫",
"C": "The blow does nothing more than open a wide cut in foe.\n+2H 2∫",
"D": "Foe blocks your attack on his chest. You slash foe's upper area.\n+3H 2∫",
"E": "Blow to foe's upper leg. Leg armor helps block the blow.\nwith leg greaves: +5H w/o leg greaves: +3H 3∫"
},
{
"Score": "46-50",
"A": "Blow to foe's back. Foe attempts to ward you off with a wild swing.\n+2H (π-30)",
"B": "Foe twists oddly to avoid your attack. Blow strikes foe's back.\n+4H (π-30)",
"C": "Blow to foe's back. Foe twists out of it and you turn your weapon to magnify the wound. Foe yells out.\n+3H ∑∏ ∫",
"D": "Reach long and catch foe in his lower back. He twists out of it, but is unbalanced.\n+3H ∑∏ 2∫",
"E": "Strike to foe's stomach. He doubles over in pain and you pull your sword clean with one more sweep.\n+4H ∑∏ 3∫"
},
{
"Score": "51-55",
"A": "Blow to foe's chest. Foe stumbles back and puts up a feeble guard.\n+2H (π-25) ∫",
"B": "Quality strike. Minor chest wound. If foe has armor, he only staggers. If not, the wound is effective.\nwith chest armor: +4H π w/o chest armor: +3H (-5)",
"C": "Blow lands solidly upon foe's chest. You get some slashing action, but not a mortal wound.\n+4H π 2∫ (-10)",
"D": "Heavy blow to upper torso. Wound falls open and foe is in pain. His guard is still up, amazingly enough.\n+5H π 3∫ (-15)",
"E": "Cut foe open with little grace. You are unsure of your success until you see all the blood coming out of his chest.\n+6H 2∑ 4∫ (-10)"
},
{
"Score": "56-60",
"A": "You recover from your initial swing and bring edge across foe's thigh.\n+3H π 2∫",
"B": "Edge makes contact well enough. Minor thigh wound.\n+4H 2∫",
"C": "Strike to side slips down onto foe's thigh. The wound is effective.\n+5H 2∫",
"D": "Tip of your blade gets a hit on foe's thigh. You twist your weapon.\n+6H 2∑ 2∫",
"E": "Thigh wound. Your blow cuts deep and severs an important vein.\n+8H 2∑ 5∫"
},
{
"Score": "61-65",
"A": "You feign high and strike low. Slash foe in back of upper leg.\n+3H 2∫ (-10)",
"B": "Nick foe in his forearm. Wound bleeds surprisingly strongly.\n+4H 2∫ (-10)",
"C": "Catch part of foe's forearm. You make a long slice in foe's arm.\n+4H 3∫ (-10)",
"D": "You are lucky to strike foe's forearm while recovering from a lunge.\n+4H 2∑ 3∫ (-10)",
"E": "Foe tries to disarm you and pays with a nasty cut to his forearm.\n+6H 2∑ 3∫ (-15)"
},
{
"Score": 66,
"A": "Foe blocks your attack with his shield arm. Shoulder is broken and arm is useless. You have initiative.\n+9H 3∑ (+10)",
"B": "Your strike misses torso and breaks foe's elbow. Foe drops his weapon and his weapon arm is useless.\n+8H 4∑ 2∏",
"C": "Your swing falls short when foe leaps back. You shatter foe's knee. Foe is knocked down.\n+6H 3∏ (-90)",
"D": "You knock foe out for 6 hours with a strike to side of head. If foe has no helm, you kill him instantly.\n+15H",
"E": "Block foe's weapon arm away and then sever it. Foe drops immediately and expires in 12 rounds. Good shot!\n+12H (+10)"
},
{
"Score": "67-70",
"A": "Strike lands close against foe's neck. Foe is horrified.\n+6H 3∑ ∏",
"B": "Your attempt to behead foe almost works. Neck strike. Foe is not happy.\n+7H 2∑ 3∫ (-5)",
"C": "Slash foe's neck. Your weapon cuts neck garments (and armor) free.\n+8H 4∑ 2∏ (+10)",
"D": "You strike foe's shoulder and slash muscles.\n+5H 3∑ (-20) (+10)",
"E": "Slash tendons and crush the bones in foe's shield arm shoulder. Arm is useless.\n4∑ 2∫"
},
{
"Score": "71-75",
"A": "Blow falls on lower leg. Slash tendons. Poor sucker.\n+4H 2∑ 2∫ (-30)",
"B": "Slash muscle in foe's calf. Foe is in too much pain to regain footing quickly.\n+6H 3∑ (-40)",
"C": "Slash muscle and tendons in foe's lower leg. Foe stumbles forward into you with his guard down.\n+7H 2∑∏ (-45)",
"D": "Slash muscle and sever tendons in foe's lower leg. He can't stand much longer. His guard is feeble.\n3∑ 2∏ (-50)",
"E": "Slash foe's lower leg and sever muscle and tendons. Foe will fall without something to lean against.\n+8H 6∑ (-70)"
},
{
"Score": "76-80",
"A": "Foe goes low, but you still catch his upper arm. It's a bleeder.\n+5H 2∑∏ 3∫ (-25)",
"B": "Foe moves his shield arm too slowly. You gladly slash his arm.\n+6H 2∑∏ 3∫ (-30)",
"C": "You come in high and fast. Slash muscle and tendons in foe's shield arm. Foe's arm is useless.\n+9H 6∑ 4∫",
"D": "Foe mistakenly brings his weapon arm across your blade. Sever tendons.Foe's arm is limp and useless.\n+10H 4∑ 2∏",
"E": "Foe reaches out to block your blow. You sever two fingers and break his shield arm making it useless.\n+12H 3∑∏"
},
{
"Score": "81-85",
"A": "Foe steps right into your swing. You make a large wound.\n+6H 5∑ 6∫ (+20)",
"B": "Your edge bites half its width into foe. Open up a terrible wound. Blood goes everywhere.\n+7H 2∑∏ 6∫",
"C": "You follow your training well. You extend on your slashing arc. Strike lands against foe's side.\n+8H 2∑∏ 4∫ (-20)",
"D": "You plunge your weapon into foe's stomach. Major abdomenal wound. Foe is instantly pale from blood loss.\n+10H 4∑ 2∏ 8∫ (-10)",
"E": "Sever opponent's hand. Sad. Foe is down and in shock for 12 rounds, then dies.\n+5H 12∑∏"
},
{
"Score": "86-90",
"A": "Foe turns out and away from your swing. You still catch his side.\n+8H 2∑∏ 2∫ (-10)",
"B": "Strike to back. Foe goes prone trying to avoid your strike. He gets up facing the wrong direction.\n+10H 3∑∏ 3∫",
"C": "Blast to back breaks bone. Foe stumbles forward before falling down. He is having trouble standing.\n+9H 4∑∏ (-10)",
"D": "Your attempt to disarm foe is even more effective. Sever opponent's hand. Foe is in shock for 6 rounds and then dies.\n+6H 6∑∏",
"E": "Meat chopping strike severs foe's leg. Foe drops and lapses in unconsciousness. Foe dies in 9 rounds.\n+15H (+10)"
},
{
"Score": "91-95",
"A": "Blow to foe's head. If no helmet, cut off foe's ear (all hearing ability is halved).\nwith helmet: +3H 2∑∏ w/o helmet: +3H 3∑ 3∫",
"B": "Strike to foe's hip. The blow has little edge, but much impact. Your blow staggers foe. His recovery is slow.\n+7H 3∑ (-20) (+10)",
"C": "Chop the top of foe's thigh. Sever foe's leg. Foe drops immediately and dies in 6 rounds due to shock and blood loss.\n+20H",
"D": "Sever foe's weapon arm and bury your sword into foe's side. Foe falls prone. Foe is in shock for 12 rounds, then dies.\n+15H 9∑∏",
"E": "Sever foe's spine. Foe collapses, paralyzed from the neck down permanently.\n+20H"
},
{
"Score": "96-99",
"A": "The tip of your weapon slashes foe's nose. Minor wound and a permanent scar.\n+2H 6∑ 2∫ (-30)",
"B": "Strike to foe's head breaks skull and causes massive brain damage. Foe drops and dies in 6 rounds.\n+20H",
"C": "You cleave shield and arm in half Foe attempts to catch his falling arm. Foe is in shock for 12 rounds then dies.\n+18H 12∑∏",
"D": "Slash foe's side. Foe dies in 3 rounds due to internal organ damage. Foe is down and unconscious immediately.\n+20H",
"E": "Strike to foe's head destroys brain and makes life difficult for the poor fool. Foe expires in a heap—immediately.\n—"
},
{
"Score": 100,
"A": "Strike severs carotid artery and jugular vein, breaking foe's neck. Foe dies in 6 rounds of agony.\n—",
"B": "Disembowel foe, killing him instantly. 25% chance your weapon is stuck in opponent for 1 round.\n—",
"C": "Strike up, in, and across foe's forehead. Destroy foe's eyes. Foe flips onto his back in pain.\n+5H 30∑∏",
"D": "Impale foe in heart. Foe dies instantly. Heart is destroyed. 25% chance your weapon is stuck in for 2 rounds.\n+12H",
"E": "Very close! Strike to foe's groin area. All vital organs are destroyed immediately. Foe dies after 24 rounds of agony.\n+10H 12∑∏"
}
]

315
module/documents/actor.js Normal file
View File

@ -0,0 +1,315 @@
export class RMFRPActor extends Actor {
/** @override */
prepareData() {
// Prepare data for the actor. Calling the super version of this executes
// the following, in order: data reset (to clear active effects),
// prepareBaseData(), prepareEmbeddedDocuments() (including active effects),
// prepareDerivedData().
super.prepareData();
}
prepareDerivedData() {
const actorData = this;
const systemData = actorData.system;
const flags = actorData.flags.rmfrp || {};
// Make separate methods for each Actor type (character, npc, etc.) to keep
// things organized.
this._prepareCharacterData(actorData);
this._prepareNpcData(actorData);
}
/**
* Prepare Character specific data.
* @param {Actor} actorData The NPC Object to prepare data for
*/
_prepareCharacterData(actorData) {
if (actorData.type !== "character") return;
console.log("*****Flag", this.getFlag("world", "importing"));
if (this.getFlag("world", "importing")) {
return; // Don't calculate skill bonuses if we are importing
}
this.calculateBasicStatBonus(actorData);
// Calculate Stat Bonuses for the Actor
this.calculateStatBonuses(actorData);
// Calculate Resistance Rolls for the Actor
this.calculateResistanceRolls(actorData);
// Iterate through and apply Stat bonuses for Skill Category Items
this.calculateSkillCategoryStatBonuses();
// Iterate through and apply Skill Category Bonuses for Skill items
this.calculateSkillBonuses();
this.computeWoundsMalus();
}
getStunnedModifier() {
if (this.system.state.stunned) {
return Math.min(-50 + (3*this.system.stats.self_discipline.stat_bonus), 0)
} else {
return 0;
}
}
computeWoundsMalus() {
// Compute % of wounds
let percent = 100 - (this.system.attributes.hits.current*100/this.system.attributes.hits.max);
let modifier = 0;
if (percent > 25 && percent < 50) {
modifier = -10;
} else if (percent >= 51 && percent < 75) {
modifier = -20;
} else if (percent >= 76) {
modifier = -30;
}
this.system.modifiers.woundsModifier = modifier;
console.log(`rmfrp | actor.js | Wounds Malus: ${this.system.modifiers.woundsModifier} ${percent}`);
}
/**
* Prepare NPC specific data.
* @param {Actor} actorData The NPC Object to prepare data for
*/
_prepareNpcData(actorData) {
if (actorData.type !== "npc") return;
// Make modifications to data here. For example:
const data = actorData.data;
}
// This checks to see if you have a Rollable Table called "Basic Stat Bonus Table" and uses it to calculate the basic stat bonuses.
calculateBasicStatBonus(actorData) {
const systemData = actorData.system;
for (const table of game.tables) {
if (table.name === "Basic Stat Bonus Table") {
for (const result of table.results) {
if (actorData.system.stats.agility.temp >= Number(result.range[0]) && actorData.system.stats.agility.basic_bonus <= Number(result.range[1])) {
actorData.system.stats.agility.basic_bonus = parseInt(result.text, 10);
}
if (actorData.system.stats.constitution.temp >= Number(result.range[0]) && actorData.system.stats.constitution.basic_bonus <= Number(result.range[1])) {
actorData.system.stats.constitution.basic_bonus = parseInt(result.text, 10);
}
if (actorData.system.stats.memory.temp >= Number(result.range[0]) && actorData.system.stats.memory.basic_bonus <= Number(result.range[1])) {
actorData.system.stats.memory.basic_bonus = parseInt(result.text, 10);
}
if (actorData.system.stats.reasoning.temp >= Number(result.range[0]) && actorData.system.stats.reasoning.basic_bonus <= Number(result.range[1])) {
actorData.system.stats.reasoning.basic_bonus = parseInt(result.text, 10);
}
if (actorData.system.stats.self_discipline.temp >= Number(result.range[0]) && actorData.system.stats.self_discipline.basic_bonus <= Number(result.range[1])) {
actorData.system.stats.self_discipline.basic_bonus = parseInt(result.text, 10);
}
if (actorData.system.stats.empathy.temp >= Number(result.range[0]) && actorData.system.stats.empathy.basic_bonus <= Number(result.range[1])) {
actorData.system.stats.empathy.basic_bonus = parseInt(result.text, 10);
}
if (actorData.system.stats.intuition.temp >= Number(result.range[0]) && actorData.system.stats.intuition.basic_bonus <= Number(result.range[1])) {
actorData.system.stats.intuition.basic_bonus = parseInt(result.text, 10);
}
if (actorData.system.stats.presence.temp >= Number(result.range[0]) && actorData.system.stats.presence.basic_bonus <= Number(result.range[1])) {
actorData.system.stats.presence.basic_bonus = parseInt(result.text, 10);
}
if (actorData.system.stats.quickness.temp >= Number(result.range[0]) && actorData.system.stats.quickness.basic_bonus <= Number(result.range[1])) {
actorData.system.stats.quickness.basic_bonus = parseInt(result.text, 10);
}
if (actorData.system.stats.strength.temp >= Number(result.range[0]) && actorData.system.stats.strength.basic_bonus <= Number(result.range[1])) {
actorData.system.stats.strength.basic_bonus = parseInt(result.text, 10);
}
}
}
}
}
// Tally each stat bonus and populate the total field.
calculateStatBonuses(actorData) {
const systemData = actorData.system;
actorData.system.stats.agility.stat_bonus = Number(systemData.stats.agility.racial_bonus)
+ Number(systemData.stats.agility.special_bonus)
+ Number(systemData.stats.agility.basic_bonus);
actorData.system.stats.constitution.stat_bonus = Number(systemData.stats.constitution.racial_bonus)
+ Number(systemData.stats.constitution.special_bonus)
+ Number(systemData.stats.constitution.basic_bonus);
actorData.system.stats.memory.stat_bonus = Number(systemData.stats.memory.racial_bonus)
+ Number(systemData.stats.memory.special_bonus)
+ Number(systemData.stats.memory.basic_bonus);
actorData.system.stats.reasoning.stat_bonus = Number(systemData.stats.reasoning.racial_bonus)
+ Number(systemData.stats.reasoning.special_bonus)
+ Number(systemData.stats.reasoning.basic_bonus);
actorData.system.stats.self_discipline.stat_bonus = Number(systemData.stats.self_discipline.racial_bonus)
+ Number(systemData.stats.self_discipline.special_bonus)
+ Number(systemData.stats.self_discipline.basic_bonus);
actorData.system.stats.empathy.stat_bonus = Number(systemData.stats.empathy.racial_bonus)
+ Number(systemData.stats.empathy.special_bonus)
+ Number(systemData.stats.empathy.basic_bonus);
actorData.system.stats.intuition.stat_bonus = Number(systemData.stats.intuition.racial_bonus)
+ Number(systemData.stats.intuition.special_bonus)
+ Number(systemData.stats.intuition.basic_bonus);
actorData.system.stats.presence.stat_bonus = Number(systemData.stats.presence.racial_bonus)
+ Number(systemData.stats.presence.special_bonus)
+ Number(systemData.stats.presence.basic_bonus);
actorData.system.stats.quickness.stat_bonus = Number(systemData.stats.quickness.racial_bonus)
+ Number(systemData.stats.quickness.special_bonus)
+ Number(systemData.stats.quickness.basic_bonus);
actorData.system.stats.strength.stat_bonus = Number(systemData.stats.strength.racial_bonus)
+ Number(systemData.stats.strength.special_bonus)
+ Number(systemData.stats.strength.basic_bonus);
}
// Calculate each Resistance Roll with the formula on the character sheet.
calculateResistanceRolls(actorData) {
const systemData = actorData.system;
actorData.system.resistance_rolls.essence.value = Number(systemData.stats.empathy.stat_bonus * 3);
actorData.system.resistance_rolls.channeling.value = Number(systemData.stats.intuition.stat_bonus * 3);
actorData.system.resistance_rolls.mentalism.value = Number(systemData.stats.presence.stat_bonus * 3);
actorData.system.resistance_rolls.fear.value = Number(systemData.stats.self_discipline.stat_bonus * 3);
actorData.system.resistance_rolls.poison_disease.value = Number(systemData.stats.constitution.stat_bonus * 3);
actorData.system.resistance_rolls.chann_ess.value = Number(systemData.stats.intuition.stat_bonus)
+ Number(systemData.stats.empathy.stat_bonus);
actorData.system.resistance_rolls.chann_ment.value = Number(systemData.stats.intuition.stat_bonus)
+ Number(systemData.stats.presence.stat_bonus);
actorData.system.resistance_rolls.ess_ment.value = Number(systemData.stats.empathy.stat_bonus)
+ Number(systemData.stats.presence.stat_bonus);
actorData.system.resistance_rolls.arcane.value = Number(systemData.stats.empathy.stat_bonus)
+ Number(systemData.stats.intuition.stat_bonus)
+ Number(systemData.stats.presence.stat_bonus);
actorData.system.resistance_rolls.essence.total = actorData.system.resistance_rolls.essence.value
+ actorData.system.resistance_rolls.essence.race_mod;
actorData.system.resistance_rolls.channeling.total = actorData.system.resistance_rolls.channeling.value
+ actorData.system.resistance_rolls.channeling.race_mod;
actorData.system.resistance_rolls.mentalism.total = actorData.system.resistance_rolls.mentalism.value
+ actorData.system.resistance_rolls.mentalism.race_mod;
actorData.system.resistance_rolls.fear.total = actorData.system.resistance_rolls.fear.value
+ actorData.system.resistance_rolls.fear.race_mod;
actorData.system.resistance_rolls.poison_disease.total = actorData.system.resistance_rolls.poison_disease.value
+ actorData.system.resistance_rolls.poison_disease.race_mod;
actorData.system.resistance_rolls.chann_ess.total = actorData.system.resistance_rolls.chann_ess.value
+ actorData.system.resistance_rolls.chann_ess.race_mod;
actorData.system.resistance_rolls.chann_ment.total = actorData.system.resistance_rolls.chann_ment.value
+ actorData.system.resistance_rolls.chann_ment.race_mod;
actorData.system.resistance_rolls.ess_ment.total = actorData.system.resistance_rolls.ess_ment.value
+ actorData.system.resistance_rolls.ess_ment.race_mod;
actorData.system.resistance_rolls.arcane.total = actorData.system.resistance_rolls.arcane.value
+ actorData.system.resistance_rolls.arcane.race_mod;
}
calculateSkillBonuses() {
for (const item of this.items) {
if (item.type === "skill") {
console.log(`rmfrp | actor.js | Calculating skill bonus for Skill: ${item.name}`);
item.calculateSelectedSkillCategoryBonus(item);
item.calculateSkillTotalBonus(item);
}
}
}
// Tallys the bonus for each Stat that is applicable to the Skill Category and then updates the total
calculateSkillCategoryStatBonuses() {
for (const item of this.items) {
if (item.type === "skill_category") {
console.log(`rmfrp | actor.js | Calculating Skill Category Stat Bonuses for: ${item.name}`);
// Get all the applicable stats for this skill category
let app_stat_1 = item.system.app_stat_1;
let app_stat_2 = item.system.app_stat_2;
let app_stat_3 = item.system.app_stat_3;
// If the first one is None we don't need to do anything further
if (app_stat_1 === "None") {
continue;
}
else
{
let applicable_stat_bonuses = [];
// Iterate through the applicable stats and find their full names
for (const stat in CONFIG.rmfrp.stats) {
// If the configured App Stat matches the one of the stats in config
if (app_stat_1 === CONFIG.rmfrp.stats[stat].shortname) {
// Add the Stat Bonus to the array
applicable_stat_bonuses.push(this.system.stats[stat].stat_bonus);
}
if (app_stat_2 === CONFIG.rmfrp.stats[stat].shortname) {
// Add the Stat Bonus to the array
applicable_stat_bonuses.push(this.system.stats[stat].stat_bonus);
}
if (app_stat_3 === CONFIG.rmfrp.stats[stat].shortname) {
// Add the Stat Bonus to the array
applicable_stat_bonuses.push(this.system.stats[stat].stat_bonus);
}
}
// Compute the total bonus for the applicable stats
let applicable_stat_bonus = 0;
for (const bonus of applicable_stat_bonuses) {
applicable_stat_bonus += bonus;
}
// Apply the update if we found stat bonuses for every applicable stat
if ( item.system.stat_bonus != applicable_stat_bonus ) {
item.system.stat_bonus = applicable_stat_bonus;
}
// Update the total in the Item
item.calculateSkillCategoryTotalBonus(item);
}
}
}
}
// For each skill category return an object in this format.
// {{ _id: "skill category name"}}
// This is the format that the select helper on the skill sheet needs
getOwnedItemsByType(item_type) {
let ownedItems = {None: "None"};
console.log(`rmfrp | actor.js | Getting owned ${item_type} for: ${this.name}`);
for (const item of this.items) {
if (item.type === item_type) {
ownedItems[item._id] = item.name;
}
}
// sort the ownedItems by name
ownedItems = Object.fromEntries(Object.entries(ownedItems).sort((a,b) => a[1].localeCompare(b[1])));
return (ownedItems);
}
}

122
module/documents/item.js Normal file
View File

@ -0,0 +1,122 @@
import { RMFRPUtility } from "../rmfrp-utility.js";
export class RMFRPItem extends Item {
/** @override */
prepareData() {
// Prepare data for the item. Calling the super version of this executes
// the following, in order: data reset (to clear active effects),
// prepareBaseData(), prepareEmbeddedDocuments() (including active effects),
// prepareDerivedData().
console.log(`rmfrp | item.js | prepareData for: ${this.name}`);
super.prepareData();
}
// Set the icon images for newly created images.
async _preCreate(data, options, userId) {
await super._preCreate(data, options, userId);
// Do not set on copied items if they have a custom Icon.
if (!data.name.includes("(Copy)"))
{
if (this.type === "armor") {
await this.updateSource({img: "systems/fvtt-rolemaster-frp/assets/default/armor.svg"});
}
else if (this.type === "weapon") {
await this.updateSource({img: "systems/fvtt-rolemaster-frp/assets/default/weapon.svg"});
}
else if (this.type === "skill") {
await this.updateSource({img: "systems/fvtt-rolemaster-frp/assets/default/skill.svg"});
}
else if (this.type === "skill_category") {
await this.updateSource({img: "systems/fvtt-rolemaster-frp/assets/default/skill_category.svg"});
}
else if (this.type === "spell") {
await this.updateSource({img: "systems/fvtt-rolemaster-frp/assets/default/spell.svg"});
}
else if (this.type === "herb_or_poison") {
await this.updateSource({img: "systems/fvtt-rolemaster-frp/assets/default/herb_or_poison.svg"});
}
else if (this.type === "transport") {
await this.updateSource({img: "systems/fvtt-rolemaster-frp/assets/default/transport.svg"});
}
}
}
prepareDerivedData() {
const itemData = this;
const systemData = itemData.system;
if (this.parent?.getFlag("world", "importing")) {
return; // Don't calculate skill bonuses if we are importing
}
// Make separate methods for each item type to keep things organized.
if (itemData.type === "skill") {
this._prepareSkillCategoryData(itemData);
}
if (itemData.type === "skill") {
this._prepareSkillData(itemData);
}
}
_prepareSkillCategoryData(itemData) {
if (itemData.type !== "skill_category") return;
console.log(`rmfrp | item.js | Preparing Skill Category Data for: ${itemData.name}`);
// Calculate Skill Category Total Bonus
this.calculateSkillCategoryTotalBonus(itemData);
}
_prepareSkillData(itemData) {
if (itemData.type !== "skill") return;
console.log(`rmfrp | item.js | Preparing Skill Data for: ${itemData.name}`);
// Make modifications to data here. For example:
// const systemData = itemData.system;
// Calculate Skill Category Bonus
this.calculateSelectedSkillCategoryBonus(itemData);
// Calculate Skill Total Bonus
this.calculateSkillTotalBonus(itemData);
}
calculateSkillCategoryTotalBonus(itemData) {
if (this.type === "skill_category") {
console.log(`rmfrp | item.js | Calculating Skill Category Total Bonus for: ${itemData.name}`);
const systemData = itemData.system;
itemData.system.total_bonus = Number(systemData.rank_bonus)
+ Number(systemData.stat_bonus)
+ Number(systemData.prof_bonus)
+ Number(systemData.special_bonus_1)
+ Number(systemData.special_bonus_2);
}
}
calculateSkillTotalBonus(itemData) {
if (this.type === "skill") {
const systemData = itemData.system;
console.log(`rmfrp | item.js | Calculating Skill Total Bonus for: ${itemData.name}`);
itemData.system.total_bonus = Number(systemData.rank_bonus)
+ Number(systemData.category_bonus)
+ Number(systemData.item_bonus)
+ Number(systemData.special_bonus_1)
+ Number(systemData.special_bonus_2);
}
}
calculateSelectedSkillCategoryBonus(itemData) {
// Find the relevant skill category
if (!this.parent) { return; } // Only if attached to an actor
let skillC = this.parent?.items || RMFRPUtility.getSkillCategories();
if (skillC) {
let item = skillC.find(it => it.type == "skill_category" && it.name.toLowerCase() == itemData.system.category.toLowerCase());
if (item) {
this.system.category_bonus = item.system.total_bonus;
} else {
ui.notifications.warn(`Skill Category ${itemData.system.category} not found for Skill ${itemData.name}`);
}
} else {
ui.notifications.info("No Skill Categories found. Please create a Skill Category.");
}
}
}

78809
module/rmfrp-attack-tables.js Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,100 @@
import { RMFRPUtility } from "./rmfrp-utility.js";
import { RMFRP_ATTACK_TABLES } from "./rmfrp-attack-tables.js";
export class RMFRPProcessTable {
constructor() {
// Load a reference to the rmfrp-tables.json file
this.rmfrpTables = RMFRP_ATTACK_TABLES
// Loop thru the tables and create a definition object, with key, name and min/ax value of each table
this.rmfrpTablesDef = {}
for (let table in this.rmfrpTables) {
let tableData = this.rmfrpTables[table]
// Search min and max values in the tableData
let min = Number.MAX_SAFE_INTEGER;
let minKey = "";
let max = Number.MIN_SAFE_INTEGER;
let maxKey = "";
for (let resultData of tableData) {
let element = resultData["result"];
if (Number(element.result)) {
let value = Number(element.result)
if (value > max) {
max = value
maxKey = element.result
}
if (value < min) {
min = value
minKey = element.result
} else {
let range = element.result.split("-");
if (Number(range[0]) > max) {
max = Number(range[0])
maxKey = element.result
}
if (Number(range[1]) < min) {
min = Number(range[1])
minKey = element.result
}
}
}
}
this.rmfrpTablesDef[table] = {
key: table,
name: RMFRPUtility.capitalizeFirstLetters(table.replace(/_/g, " ")),
min: min,
minKey: minKey,
max: max,
maxKey: maxKey
};
}
// Sort rmfrpTablesDef by name
this.rmfrpTablesDef = Object.values(this.rmfrpTablesDef).sort((a, b) => a.name.localeCompare(b.name))
}
getTableDef() {
return this.rmfrpTablesDef;
}
// Get roll result from table
getAttackRollResult(tableKey, roll, armorValue) {
roll = Number(roll);
if (isNaN(roll)) {
return undefined;
}
let table = this.rmfrpTables[tableKey]
let tableDef = this.rmfrpTablesDef[tableKey]
if (!table || !tableDef) {
return undefined;
}
// Check min and max values
if (roll < tableDef.min) {
// return the min value
return table.find((element) => {
let elem = element.result == tableDef.minKey;
return elem[String(armorValue)];
});
}
if (roll > tableDef.max) {
// return the min value
return table.find((element) => {
let elem = element.result == tableDef.maxKey;
return elem[String(armorValue)];
});
}
return table.find((element) => {
if (Number(element.result) && Number(element.result) == Number(roll)) {
return element[String(armorValue)];
} else {
// Split the result into a range
let range = element.result.split("-");
if (Number(roll) >= Number(range[0]) && Number(roll) <= Number(range[1])) {
return element[String(armorValue)];
}
}
});
}
}

207
module/rmfrp-utility.js Normal file
View File

@ -0,0 +1,207 @@
/* -------------------------------------------- */
export class RMFRPUtility {
/* -------------------------------------------- */
static async init() {
}
static capitalizeFirstLetters(str){
return str.toLowerCase().replace(/^\w|\s\w/g, function (letter) {
return letter.toUpperCase();
})
}
/* -------------------------------------------- */
static async ready() {
this.registerSettings();
this.gameSystem = game.settings.get("fvtt-rolemaster-frp", "game_system");
const skillCategories = await RMFRPUtility.loadCompendium("fvtt-rolemaster-frp.skill_categories")
this.skillCategories = skillCategories.map(i => i.toObject()).filter( i => i.system.game_system == "common" || i.system.game_system == this.gameSystem);
// Sort skill categories by name
this.skillCategories.sort((a, b) => a.name.localeCompare(b.name));
}
static getGameSystem() {
return this.gameSystem;
}
/* -------------------------------------------- */
static getSkillCategories() {
return this.skillCategories
}
/* -------------------------------------------- */
static registerSettings() {
game.settings.register("fvtt-rolemaster-frp", "game_system", {
name: "Game System",
hint: "List of Game Systems",
scope: "world",
default: "rmfrp",
requiresReload: true,
type: String,
config: true,
choices: {
rmfrp: "Rolemaster Fantasy Role Playing (RMFRP)",
merp: "Middle Earth Role Playing (MERP)"
}
});
}
/* -------------------------------------------- */
static async loadCompendiumData(compendium) {
const pack = game.packs.get(compendium);
return await pack?.getDocuments() ?? [];
}
/* -------------------------------------------- */
static async loadCompendium(compendium, filter = item => true) {
let compendiumData = await RMFRPUtility.loadCompendiumData(compendium);
return compendiumData.filter(filter);
}
/* -------------------------------------------- */
static removeChatMessageId(messageId) {
if (messageId) {
game.messages.get(messageId)?.delete();
}
}
static findChatMessageId(current) {
return RMFRPUtility.getChatMessageId(HeritiersUtility.findChatMessage(current));
}
static getChatMessageId(node) {
return node?.attributes.getNamedItem('data-message-id')?.value;
}
static findChatMessage(current) {
return RMFRPUtility.findNodeMatching(current, it => it.classList.contains('chat-message') && it.attributes.getNamedItem('data-message-id'))
}
static findNodeMatching(current, predicate) {
if (current) {
if (predicate(current)) {
return current;
}
return RMFRPUtility.findNodeMatching(current.parentElement, predicate);
}
return undefined;
}
/* -------------------------------------------- */
static getUsers(filter) {
return game.users.filter(filter).map(user => user._id);
}
/* -------------------------------------------- */
static getWhisperRecipients(rollMode, name) {
switch (rollMode) {
case "blindroll": return this.getUsers(user => user.isGM);
case "gmroll": return this.getWhisperRecipientsAndGMs(name);
case "selfroll": return [game.user.id];
}
return undefined;
}
/* -------------------------------------------- */
static getWhisperRecipientsAndGMs(name) {
let recep1 = ChatMessage.getWhisperRecipients(name) || [];
return recep1.concat(ChatMessage.getWhisperRecipients('GM'));
}
/* -------------------------------------------- */
static blindMessageToGM(chatOptions) {
let chatGM = foundry.utils.duplicate(chatOptions);
chatGM.whisper = this.getUsers(user => user.isGM);
chatGM.content = "Blinde message of " + game.user.name + "<br>" + chatOptions.content;
console.log("blindMessageToGM", chatGM);
game.socket.emit("system.fvtt-rolemaster-frp", { msg: "msg_gm_chat_message", data: chatGM });
}
/* -------------------------------------------- */
static async searchItem(dataItem) {
let item
if (dataItem.pack) {
let id = dataItem.id || dataItem._id
let items = await this.loadCompendium(dataItem.pack, item => item.id == id)
item = items[0] || undefined
} else {
item = game.items.get(dataItem.id)
}
return item
}
/* -------------------------------------------- */
static loadHandlebarsTemplates() {
const templatePaths = [
"systems/fvtt-rolemaster-frp/templates/sheets/actors/parts/actor-stats.html",
"systems/fvtt-rolemaster-frp/templates/sheets/actors/parts/actor-fixed-info.html",
"systems/fvtt-rolemaster-frp/templates/sheets/actors/parts/actor-armor-info.html",
"systems/fvtt-rolemaster-frp/templates/sheets/actors/parts/actor-resistance.html",
"systems/fvtt-rolemaster-frp/templates/sheets/actors/parts/actor-race-stat-fixed-info.html",
"systems/fvtt-rolemaster-frp/templates/sheets/actors/parts/actor-role-traits.html",
"systems/fvtt-rolemaster-frp/templates/sheets/actors/parts/actor-background-info.html",
"systems/fvtt-rolemaster-frp/templates/sheets/actors/parts/actor-skill-categories.html",
"systems/fvtt-rolemaster-frp/templates/sheets/actors/parts/actor-skills.html",
"systems/fvtt-rolemaster-frp/templates/sheets/actors/parts/actor-fav-skills.html",
"systems/fvtt-rolemaster-frp/templates/sheets/actors/parts/actor-items.html",
"systems/fvtt-rolemaster-frp/templates/sheets/actors/parts/actor-weapons.html",
"systems/fvtt-rolemaster-frp/templates/sheets/actors/parts/actor-money.html",
"systems/fvtt-rolemaster-frp/templates/sheets/actors/parts/actor-skill-categories.html",
"systems/fvtt-rolemaster-frp/templates/sheets/actors/parts/actor-skills.html",
"systems/fvtt-rolemaster-frp/templates/sheets/actors/parts/actor-armor.html",
"systems/fvtt-rolemaster-frp/templates/sheets/actors/parts/actor-herbs.html",
"systems/fvtt-rolemaster-frp/templates/sheets/actors/parts/actor-spells.html",
"systems/fvtt-rolemaster-frp/templates/sheets/actors/parts/actor-fav-spells.html",
"systems/fvtt-rolemaster-frp/templates/sheets/actors/parts/actor-fav-items.html",
"systems/fvtt-rolemaster-frp/templates/sheets/apps/app_skill_category_importer.html"
];
return loadTemplates(templatePaths);
}
/* -------------------------------------------- */
static loadHandlebarsHelpers() {
// Handlebars Helpers
Handlebars.registerHelper('count', function (list) {
return list.length;
})
Handlebars.registerHelper('includes', function (array, val) {
return array.includes(val);
})
Handlebars.registerHelper('upper', function (text) {
return text.toUpperCase();
})
Handlebars.registerHelper('lower', function (text) {
return text.toLowerCase()
})
Handlebars.registerHelper('upperFirst', function (text) {
if (typeof text !== 'string') return text
return text.charAt(0).toUpperCase() + text.slice(1)
})
Handlebars.registerHelper('notEmpty', function (list) {
return list.length > 0;
})
Handlebars.registerHelper('mul', function (a, b) {
return parseInt(a) * parseInt(b);
})
Handlebars.registerHelper("switch", function (value, options) {
this.switch_value = value;
return options.fn(this);
});
Handlebars.registerHelper("case", function (value, options) {
if (value === this.switch_value) {
return options.fn(this);
}
});
// Handle v12 removal of this helper
Handlebars.registerHelper('select', function (selected, options) {
const escapedValue = RegExp.escape(Handlebars.escapeExpression(selected));
const rgx = new RegExp(' value=[\"\']' + escapedValue + '[\"\']');
const html = options.fn(this);
return html.replace(rgx, "$& selected");
});
}
}

View File

@ -0,0 +1,397 @@
export default class RMFRPPlayerSheet extends ActorSheet {
// Override Default Options, Set CSS Classes, Set Default Sheet, Set up Sheet Tabs
static get defaultOptions() {
return foundry.utils.mergeObject(super.defaultOptions, {
width: 860,
height: 780,
template: "systems/fvtt-rolemaster-frp/templates/sheets/actors/rmfrp-character-sheet.html",
classes: ["rmfrp", "sheet", "actor"],
tabs: [{ navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "features" }]
});
}
// Make the data available to the sheet template
async getData() {
const context = super.getData();
// Use a safe clone of the actor data for further operations.
const actorData = this.actor.toObject(false);
let enrichedDescription = await TextEditor.enrichHTML(this.actor.system.description, {async: true});
// Add the actor's data to context.data for easier access, as well as flags.
context.system = actorData.system;
context.flags = actorData.flags;
context.enrichedDescription = enrichedDescription;
// Prepare character data and items.
if (actorData.type === "character") {
this._prepareItems(context);
this._prepareCharacterData(context);
}
// Prepare NPC data and items.
if (actorData.type === "npc") {
this._prepareItems(context);
}
return context;
}
// Override this method to check for duplicates when things are dragged to the sheet
// We don't want duplicate skills and skill categories.
async _onDropItem(event, data) {
// Reconstruct the item from the event
const newitem = await Item.implementation.fromDropData(data);
const itemData = newitem.toObject();
// To Do: Seperate Skills and Skill Categories. Increment Counts for items
if (itemData.type === "skill_category") {
// Get the already owned Items from the actor and push into an array
const owneditems = this.object.getOwnedItemsByType("skill_category");
let ownedskillcatlist = Object.values(owneditems);
// Check if the dragged item is not in the array and not owned
if (!ownedskillcatlist.includes(itemData.name)) {
console.log("Not Owned!");
super._onDropItem(event, data);
}
} else if ( itemData.type === "skill") {
// Get the already owned Items from the actor and push into an array
const owneditems = this.object.getOwnedItemsByType("skill");
let ownedskilllist = Object.values(owneditems);
// Check if the dragged item is not in the array and not owned
if (!ownedskilllist.includes(itemData.name)) {
console.log("Not Owned!");
super._onDropItem(event, data);
}
}
else {
super._onDropItem(event, data);
}
}
_prepareCharacterData(context) {
// Calculate Power Point Exhaustion
let powerpointPercentage = (Number(context.system.attributes.power_points.current) / Number(context.system.attributes.power_points.max)) * 100;
console.log(true);
switch (true) {
case (powerpointPercentage < 25):
context.system.attributes.power_points.modifier = "PP Exhaustion Penalty: -30 ";
break;
case (powerpointPercentage < 50):
context.system.attributes.power_points.modifier = "PP Exhaustion Penalty: -20 ";
break;
case (powerpointPercentage < 75):
//console.log("Less than 75");
context.system.attributes.power_points.modifier = "PP Exhaustion Penalty: -10 ";
break;
default:
//console.log("Setting Default");
context.system.attributes.power_points.modifier = "PP Exhaustion Penalty: 0 ";
}
// Calculate Exhaustion Point Penalty
let exhaustionPercentage = (Number(context.system.attributes.exhaustion_points.current) / Number(context.system.attributes.exhaustion_points.max)) * 100;
console.log(true);
switch (true) {
case (exhaustionPercentage < 1):
context.system.attributes.exhaustion_points.modifier = "Exhaustion Penalty: -100 ";
break;
case (exhaustionPercentage < 10):
context.system.attributes.exhaustion_points.modifier = "Exhaustion Penalty: -60 ";
break;
case (exhaustionPercentage < 25):
context.system.attributes.exhaustion_points.modifier = "Exhaustion Penalty: -30 ";
break;
case (exhaustionPercentage < 50):
context.system.attributes.exhaustion_points.modifier = "Exhaustion Penalty: -15 ";
break;
case (exhaustionPercentage < 75):
//console.log("Less than 75");
context.system.attributes.exhaustion_points.modifier = "Exhaustion Penalty: -5 ";
break;
default:
//console.log("Setting Default");
context.system.attributes.exhaustion_points.modifier = "Exhaustion Penalty: 0 ";
}
}
_prepareItems(context) {
console.log(`rmfrp | rmfrp_player_sheet.js | Preparing items for: ${this.name}`);
// Initialize containers.
const gear = [];
const playerskill= [];
const skillcat = [];
const weapons = [];
const armor = [];
const herbs = [];
const spells = [];
const equipables = [];
// Iterate through items, allocating to containers
for (let i of context.items) {
i.img = i.img || DEFAULT_TOKEN;
// Append to gear.
if (i.type === "item") {
gear.push(i);
}
else if (i.type === "weapon") {
weapons.push(i);
}
else if (i.type === "herb_or_poison") {
herbs.push(i);
}
// Append to skill categories.
else if (i.type === "skill_category") {
skillcat.push(i);
}
// Append to playerskill
else if (i.type === "skill") {
playerskill.push(i);
}
else if (i.type === "armor") {
armor.push(i);
}
else if (i.type === "spell") {
spells.push(i);
}
}
// Parse skill categories and re+levant skills
for (let s of skillcat) {
s.skills = [];
for (let sk of playerskill) {
if (sk.system.category.toLowerCase() === s.name.toLowerCase()) {
s.skills.push(sk);
}
}
// Sort skills with localcompare
s.skills.sort((a, b) => a.name.localeCompare(b.name));
}
// Sort all items
skillcat.sort((a, b) => a.name.localeCompare(b.name));
gear.sort((a, b) => a.name.localeCompare(b.name));
weapons.sort((a, b) => a.name.localeCompare(b.name));
armor.sort((a, b) => a.name.localeCompare(b.name));
herbs.sort((a, b) => a.name.localeCompare(b.name));
spells.sort((a, b) => a.name.localeCompare(b.name));
// Assign and return
context.gear = gear;
context.skillcat = skillcat;
context.playerskill = playerskill;
context.weapons = weapons;
context.armor = armor;
context.herbs = herbs;
context.spells = spells;
// Dump context to console
console.log("ACTOR CONTEXT", context);
}
async renderCharacterSettings(data) {
console.log(data);
const configSheet = await renderTemplate("systems/fvtt-rolemaster-frp/templates/sheets/actors/dialogs/app_skill_category_importer.html", data);
return (configSheet);
}
activateListeners(html) {
super.activateListeners(html);
// Render the item sheet for viewing/editing prior to the editable check.
html.find(".item-edit").click(ev => {
const item = this.actor.items.get(ev.currentTarget.getAttribute("data-item-id"));
item.sheet.render(true);
});
html.find(".item-roll").click(ev => {
const item = this.actor.items.get(ev.currentTarget.getAttribute("data-item-id"));
new game.rmfrp.applications.RMFRPToolsDiceRoller(item, this.actor).render(true);
});
// -------------------------------------------------------------
// Everything below here is only needed if the sheet is editable
if (!this.isEditable) return;
// Add Item
html.find(".item-create").click(this._onItemCreate.bind(this));
// Delete Item
html.find(".item-delete").click(ev => {
console.log(ev.currentTarget.getAttribute("data-item-id"));
const item = this.actor.items.get(ev.currentTarget.getAttribute("data-item-id"));
item.delete();
});
// Show Skill Category Importer
html.find(".import-skillcats").click(async ev => {
let selectOptions = {};
for (const pack of game.packs) {
if (pack.metadata.type === "Item") {
selectOptions[pack.metadata.id] = pack.metadata.label;
}
}
new game.rmfrp.applications.RMFRPToolsSCImporter(selectOptions, this.actor).render(true);
});
// Check/Uncheck Favorite Skill
html.find(".skill-favorite").click(ev => {
const item = this.actor.items.get(ev.currentTarget.getAttribute("data-item-id"));
console.log(item);
console.log(`Before change: ${item.system.favorite}`);
if (item.system.favorite === true) {
console.log("Setting False");
item.update({system: {favorite: false}});
} else {
console.log("Setting True");
item.update({system: {favorite: true}});
}
console.log(`After change: ${item.system.favorite}`);
});
// Check/Uncheck Favorite Spell
html.find(".spell-favorite").click(ev => {
const item = this.actor.items.get(ev.currentTarget.getAttribute("data-item-id"));
console.log(item);
console.log(`Before change: ${item.system.favorite}`);
if (item.system.favorite === true) {
console.log("Setting False");
item.update({system: {favorite: false}});
} else {
console.log("Setting True");
item.update({system: {favorite: true}});
}
console.log(`After change: ${item.system.favorite}`);
});
// Equip/Unequip Weapon/Armor
html.find(".equippable").click(ev => {
const item = this.actor.items.get(ev.currentTarget.getAttribute("data-item-id"));
console.log(item);
console.log(`Before change: ${item.system.equipped}`);
if (item.system.equipped === true) {
console.log("Setting False");
item.update({system: {equipped: false}});
} else {
console.log("Setting True");
item.update({system: {equipped: true}});
}
console.log(`After change: ${item.system.equipped}`);
});
// Wear/Remove Item
html.find(".wearable").click(ev => {
const item = this.actor.items.get(ev.currentTarget.getAttribute("data-item-id"));
console.log(item);
console.log(`Before change: ${item.system.equipped}`);
if (item.system.worn === true) {
console.log("Setting False");
item.update({system: {worn: false}});
} else {
console.log("Setting True");
item.update({system: {worn: true}});
}
console.log(`After change: ${item.system.equipped}`);
});
// Change New Ranks value when clicked in player sheet. From 0-3.
html.find(".skill-newrank").click(ev => {
const item = this.actor.items.get(ev.currentTarget.getAttribute("data-item-id"));
console.log("Firing in the Player Sheet");
console.log(ev.currentTarget.getAttribute("value"));
console.log(ev.currentTarget.getAttribute("data-item-id"));
switch (ev.currentTarget.getAttribute("value")) {
case "0":
console.log("Skill NewRanks is 0 setting to 1");
item.update({system: {new_ranks: { value: 1 }}});
break;
case "1":
console.log("Skill NewRanks is 1 setting to 2");
item.update({system: {new_ranks: { value: 2 }}});
break;
case "2":
console.log("Skill NewRanks is 2 setting to 3");
item.update({system: {new_ranks: { value: 3 }}});
break;
case "3":
console.log("Skill NewRanks is 3 setting to 0");
item.update({system: {new_ranks: { value: 0 }}});
break;
}
});
// Change New Ranks value when clicked in player sheet. From 0-3.
html.find(".skillcategory-newrank").click(ev => {
const item = this.actor.items.get(ev.currentTarget.getAttribute("data-item-id"));
console.log("Firing in the Player Sheet");
console.log(ev.currentTarget.getAttribute("value"));
console.log(ev.currentTarget.getAttribute("data-item-id"));
switch (ev.currentTarget.getAttribute("value")) {
case "0":
console.log("Skill Category NewRanks is 0 setting to 1");
item.update({system: {new_ranks: { value: 1 }}});
break;
case "1":
console.log("Skill Category NewRanks is 1 setting to 2");
item.update({system: {new_ranks: { value: 2 }}});
break;
case "2":
console.log("Skill Category NewRanks is 2 setting to 3");
item.update({system: {new_ranks: { value: 3 }}});
break;
case "3":
console.log("Skill Category NewRanks is 3 setting to 0");
item.update({system: {new_ranks: { value: 0 }}});
break;
}
});
}
async _onItemCreate(event) {
event.preventDefault();
const header = event.currentTarget;
// Get the type of item to create.
const type = header.dataset.type;
// Grab any data associated with this control.
const data = duplicate(header.dataset);
// Initialize a default name.
const name = `New ${type.capitalize()}`;
// Prepare the item object.
const itemData = {
name: name,
type: type,
data: data
};
// Remove the type from the dataset since it's in the itemData.type prop.
delete itemData.data.type;
// Finally, create the item!
return await Item.create(itemData, {parent: this.actor});
}
}

View File

@ -0,0 +1,55 @@
export default class RMFRPActorSheetConfig extends FormApplication {
constructor(selectOptions, character) {
super();
this.selectOptions = selectOptions;
this.character = character;
}
static get defaultOptions() {
return foundry.utils.mergeObject(super.defaultOptions, {
classes: ["form"],
popOut: true,
template: "systems/fvtt-rolemaster-frp/templates/sheets/actors/apps/actor-settings.html"
});
}
getData() {
// Send data to the template
return {
selectOptions: this.selectOptions
};
}
activateListeners(html) {
super.activateListeners(html);
}
async _updateObject(event, formData) {
console.log("Deleting Old Skill Categories.");
for (const item of this.character.items) {
if (item.type === "skill_category") {
item.delete();
}
}
const pack = game.packs.get(formData.selectOptions);
const skillCategoryData = await pack.getIndex();
console.log("Importing New Skill Categories.");
for (const sc of skillCategoryData) {
const newitem = await pack.getDocument(sc._id);
let newDocuments = [];
if (newitem.type === "skill_category") {
console.log(newitem);
newDocuments.push(newitem);
}
if (newDocuments.length > 0) {
await Item.createDocuments(newDocuments, {parent: this.character});
}
}
}
}

View File

@ -0,0 +1,163 @@
export default class RMFRPToolsDiceRoller extends FormApplication {
constructor(item, actor) {
super();
this.item = foundry.utils.duplicate(item);
this.actor = actor;
this.itemName = item.name;
this.characterBonus = Number(item.system.total_bonus);
this.stunnedModifier = actor.getStunnedModifier()
this.rollType = [
{ value: "one_to_onehundred", text: "1-100", selected: false },
{ value: "open_ended", text: "Open-Ended", selected: true },
{ value: "high_open_ended", text: "High Open-Ended", selected: false },
{ value: "low_open_ended", text: "Low Open-Ended", selected: false }
];
}
static get defaultOptions() {
return foundry.utils.mergeObject(super.defaultOptions, {
classes: ["form"],
title: "Rolemaster Dice Roller",
popOut: true,
width: 480,
height: 440,
template: "systems/fvtt-rolemaster-frp/templates/sheets/apps/app_dice_roller.html"
});
}
getData() {
// Send data to the template
return {
itemName: this.itemName,
characterBonus: this.characterBonus,
selectOptions: this.rollType,
woundsModifier: this.actor.system.modifiers.woundsModifier,
config: CONFIG.rmfrp,
difficulty: 0,
combatSituation: 0,
lightningModifier: 0,
darknessModifier: 0,
hitsPerRound: 0,
isStunned: this.actor.system.state.stunned,
stunnedModifier: this.stunnedModifier
};
}
activateListeners(html) {
super.activateListeners(html);
}
async _updateObject(event, formData) {
console.log("Rolling Dice");
console.log(formData);
console.log(event);
this.roll(event.submitter?.dataset?.value, formData);
}
/* -------------------------------------------- */
async showDiceSoNice(roll, rollMode) {
if (game.modules.get("dice-so-nice")?.active) {
if (game.dice3d) {
let whisper = null;
let blind = false;
rollMode = rollMode ?? game.settings.get("core", "rollMode");
switch (rollMode) {
case "blindroll": //GM only
blind = true;
case "gmroll": //GM + rolling player
whisper = this.getUsers(user => user.isGM);
break;
case "roll": //everybody
whisper = this.getUsers(user => user.active);
break;
case "selfroll":
whisper = [game.user.id];
break;
}
await game.dice3d.showForRoll(roll, game.user, true, whisper, blind);
}
}
}
/* -------------------------------------------- */
async roll(rollKey, formData) {
let baseRoll = await new Roll("1d100").roll();
await this.showDiceSoNice(baseRoll, game.settings.get("core", "rollMode"))
let rollType = this.rollType.find(r => r.value == rollKey)?.text;
let rollData = {
name: this.itemName,
rollKey: rollKey,
rollType: rollType,
difficulty: Number(formData.difficulty),
combatSituation: Number(formData?.combatSituation || 0),
lightningModifier: Number(formData?.lightningModifier || 0),
darknessModifier: Number(formData?.darknessModifier || 0),
characterBonus: Number(this.characterBonus),
woundsModifier: Number(this.actor.system.modifiers.woundsModifier),
hitsPerRound: Number(formData.hitsPerRound),
isStunned: this.actor.system.state.stunned,
stunnedModifier: this.stunnedModifier,
rolls: [baseRoll],
}
if (baseRoll.result == 66) {
rollData.content = "You rolled a 66!";
}
// Process the for low open ended rolls
if (rollKey === "open_ended" || rollKey === "low_open_ended") {
if (baseRoll.result < 6) {
rollData.lowopen = true
let newRoll = await new Roll("-1d100").roll();
await this.showDiceSoNice(newRoll, game.settings.get("core", "rollMode"))
rollData.rolls.push(newRoll);
while (newRoll.result > 95) {
newRoll = await new Roll("-1d100").roll();
await this.showDiceSoNice(newRoll, game.settings.get("core", "rollMode"))
rollData.rolls.push(newRoll);
}
}
}
// Process the for high open ended rolls
if (rollKey === "open_ended" || rollKey === "high_open_ended") {
if (baseRoll.result > 95) {
rollData.highopen = true
let newRoll = await new Roll("1d100").roll();
await this.showDiceSoNice(newRoll, game.settings.get("core", "rollMode"))
rollData.rolls.push(newRoll);
while (newRoll.result > 95) {
newRoll = await new Roll("1d100").roll();
await this.showDiceSoNice(newRoll, game.settings.get("core", "rollMode"))
rollData.rolls.push(newRoll);
}
}
}
// Compute total of rolls
rollData.totalRolls = rollData.rolls.reduce((acc, roll) => Number(acc) + Number(roll.result), 0);
rollData.totalFinal = rollData.totalRolls + Number(rollData.combatSituation) +
Number(rollData.lightningModifier) +
Number(rollData.darknessModifier) +
Number(this.actor.system.modifiers.woundsModifier) +
Number(formData.difficulty) +
Number(rollData.hitsPerRound) +
Number(rollData.stunnedModifier) +
Number(this.characterBonus);
console.log(">>> Roll Data: ", rollData);
// Define the Chat Message Template
let chatTemplate = "systems/fvtt-rolemaster-frp/templates/chat/chat_dice_roll.html";
// Pass the Data through to be used in the Chat Message
let chatData = rollData
// Render the Rolls to the Chat Window
renderTemplate(chatTemplate, chatData).then((html) => {
let chatOptions = {
style: CONST.CHAT_MESSAGE_STYLES.ROLL,
flavor: rollType,
rollMode: game.settings.get("core", "rollMode"),
content: html,
};
ChatMessage.create(chatOptions);
});
}
}

View File

@ -0,0 +1,67 @@
import { RMFRPUtility } from "../../rmfrp-utility.js";
export default class RMFRPToolsSCImporter extends FormApplication {
constructor(selectOptions, character) {
super();
this.selectOptions = selectOptions;
this.character = character;
}
static get defaultOptions() {
return foundry.utils.mergeObject(super.defaultOptions, {
classes: ["form"],
width: 520,
popOut: true,
title: "Import Skill Categories",
template: "systems/fvtt-rolemaster-frp/templates/sheets/apps/app_skill_category_importer.html"
});
}
getData() {
// Send data to the template
return {
selectOptions: this.selectOptions
};
}
activateListeners(html) {
super.activateListeners(html);
}
async _updateObject(event, formData) {
await this.character.setFlag("world", "importing", true);
let itemType = event.submitter.value;
let toDelete = [];
for (const item of this.character.items) {
if (item.type === itemType) {
toDelete.push(item.id);
}
if (itemType == "skill_category" && item.type === "skill") {
toDelete.push(item.id); // Delete also skill when re-importing skill categories.
}
}
await this.character.deleteEmbeddedDocuments("Item", toDelete);
let comp = (itemType == "skill") ? formData.selectOptionsSkills : formData.selectOptionsCategories;
const pack = game.packs.get(comp);
const skillCategoryData = await pack.getIndex();
console.log("Importing New Skills/Skill Categories.");
let newDocuments = [];
let gameSystem = RMFRPUtility.getGameSystem();
for (const sc of skillCategoryData) {
const newitem = await pack.getDocument(sc._id);
if (newitem.type === itemType && (newitem.system.game_system === "common" || newitem.system.game_system === gameSystem)) {
newDocuments.push(newitem);
}
}
if (newDocuments.length > 0) {
await Item.createDocuments(newDocuments, {parent: this.character});
}
await this.character.setFlag("world", "importing", false);
}
}

View File

@ -0,0 +1,36 @@
// Our Item Sheet extends the default
export default class RMFRPArmorSheet extends ItemSheet {
// Set the height and width
static get defaultOptions() {
return foundry.utils.mergeObject(super.defaultOptions, {
width: 530,
height: 440,
template: "systems/fvtt-rolemaster-frp/templates/sheets/items/rmfrp-armor-sheet.html",
classes: ["rmfrp", "sheet", "item"]
});
}
// If our sheet is called here it is.
get template() {
return "systems/fvtt-rolemaster-frp/templates/sheets/items/rmfrp-armor-sheet.html";
}
// Make the data available to the sheet template
async getData() {
const baseData = await super.getData();
let enrichedDescription = await TextEditor.enrichHTML(this.item.system.description, {async: true});
let sheetData = {
owner: this.item.isOwner,
editable: this.isEditable,
item: baseData.item,
system: baseData.item.system,
config: CONFIG.rmfrp,
enrichedDescription: enrichedDescription
};
return sheetData;
}
}

View File

@ -0,0 +1,36 @@
// Our Item Sheet extends the default
export default class RMFRPHerbAndPoisonSheet extends ItemSheet {
// Set the height and width
static get defaultOptions() {
return foundry.utils.mergeObject(super.defaultOptions, {
width: 530,
height: 440,
template: "systems/fvtt-rolemaster-frp/templates/sheets/items/rmfrp-herb-or-poison-sheet.html",
classes: ["rmfrp", "sheet", "item"]
});
}
// If our sheet is called here it is.
get template() {
return "systems/fvtt-rolemaster-frp/templates/sheets/items/rmfrp-herb-or-poison-sheet.html";
}
// Make the data available to the sheet template
async getData() {
const baseData = await super.getData();
let enrichedDescription = await TextEditor.enrichHTML(this.item.system.description, {async: true});
let sheetData = {
owner: this.item.isOwner,
editable: this.isEditable,
item: baseData.item,
system: baseData.item.system,
config: CONFIG.rmfrp,
enrichedDescription: enrichedDescription
};
return sheetData;
}
}

View File

@ -0,0 +1,36 @@
// Our Item Sheet extends the default
export default class RMFRPItemSheet extends ItemSheet {
// Set the height and width
static get defaultOptions() {
return foundry.utils.mergeObject(super.defaultOptions, {
width: 530,
height: 440,
template: "systems/fvtt-rolemaster-frp/templates/sheets/items/rmfrp-item-sheet.html",
classes: ["rmfrp", "sheet", "item"]
});
}
// If our sheet is called here it is.
get template() {
return "systems/fvtt-rolemaster-frp/templates/sheets/items/rmfrp-item-sheet.html";
}
// Make the data available to the sheet template
async getData() {
const baseData = await super.getData();
let enrichedDescription = await TextEditor.enrichHTML(this.item.system.description, {async: true});
let sheetData = {
owner: this.item.isOwner,
editable: this.isEditable,
item: baseData.item,
system: baseData.item.system,
config: CONFIG.rmfrp,
enrichedDescription: enrichedDescription
};
return sheetData;
}
}

View File

@ -0,0 +1,36 @@
// Our Item Sheet extends the default
export default class RMFRPTransportSheet extends ItemSheet {
// Set the height and width
static get defaultOptions() {
return foundry.utils.mergeObject(super.defaultOptions, {
width: 530,
height: 440,
template: "systems/fvtt-rolemaster-frp/templates/sheets/items/rmfrp-transport-sheet.html",
classes: ["rmfrp", "sheet", "item"]
});
}
// If our sheet is called here it is.
get template() {
return "systems/fvtt-rolemaster-frp/templates/sheets/items/rmfrp-transport-sheet.html";
}
// Make the data available to the sheet template
async getData() {
const baseData = await super.getData();
let enrichedDescription = await TextEditor.enrichHTML(this.item.system.description, {async: true});
let sheetData = {
owner: this.item.isOwner,
editable: this.isEditable,
item: baseData.item,
system: baseData.item.system,
config: CONFIG.rmfrp,
enrichedDescription: enrichedDescription
};
return sheetData;
}
}

View File

@ -0,0 +1,45 @@
// Our Item Sheet extends the default
export default class RMFRPWeaponSheet extends ItemSheet {
// Set the height and width
static get defaultOptions() {
return foundry.utils.mergeObject(super.defaultOptions, {
width: 530,
height: 440,
template: "systems/fvtt-rolemaster-frp/templates/sheets/items/rmfrp-weapon-sheet.html",
classes: ["rmfrp", "sheet", "item"]
});
}
// If our sheet is called here it is.
get template() {
return "systems/fvtt-rolemaster-frp/templates/sheets/items/rmfrp-weapon-sheet.html";
}
// Make the data available to the sheet template
async getData() {
const baseData = await super.getData();
let enrichedDescription = await TextEditor.enrichHTML(this.item.system.description, {async: true});
let sheetData = {
owner: this.item.isOwner,
editable: this.isEditable,
item: baseData.item,
system: baseData.item.system,
config: CONFIG.rmfrp,
skills: {},
criticalTables: {},
attackTables: game.rmfrp.attackTables.getTableDef(),
fumbleTables: {},
enrichedDescription: enrichedDescription
}
console.log("Parent", this.object)
// Add the skill data to the sheet if the item is owned
if (this.object.actor) {
sheetData.skills = this.object.actor.getOwnedItemsByType("skill");
}
console.log(sheetData);
return sheetData;
}
}

View File

@ -0,0 +1,133 @@
// Our Item Sheet extends the default
export default class RMFRPSkillCategorySheet extends ItemSheet {
// Set the height and width
static get defaultOptions() {
return foundry.utils.mergeObject(super.defaultOptions, {
width: 580,
height: 440,
template: "systems/fvtt-rolemaster-frp/templates/sheets/skills/rmfrp-skill-category-sheet.html",
classes: ["rmfrp", "sheet", "item"]
});
}
// If our sheet is called here it is.
get template() {
return "systems/fvtt-rolemaster-frp/templates/sheets/skills/rmfrp-skill-category-sheet.html";
}
// Make the data available to the sheet template
async getData() {
const context = await super.getData();
// Get a list of stats that can be used as applicable stats
let applicableStatList = this.prepareApplicableStatNames(CONFIG);
// Get the currently selected value for all three applicable stats
let firstApplicableStat = this.prepareApplicableSelectedStat("app_stat_1");
let secondApplicableStat = this.prepareApplicableSelectedStat("app_stat_2");
let thirdApplicableStat = this.prepareApplicableSelectedStat("app_stat_3");
// Build and apply the display string for Applicable Stats
let applicableStatText =
this.buildApplicableStatsText(firstApplicableStat, secondApplicableStat, thirdApplicableStat);
context.item.system.applicable_stats = applicableStatText;
let enrichedDescription = await TextEditor.enrichHTML(this.item.system.description, {async: true});
let sheetData = {
owner: this.item.isOwner,
editable: this.isEditable,
item: context.item,
system: context.item.system,
config: CONFIG.rmfrp,
applicable_stat_list: applicableStatList,
applicable_stat_1_selected: firstApplicableStat,
applicable_stat_2_selected: secondApplicableStat,
applicable_stat_3_selected: thirdApplicableStat,
enrichedDescription: enrichedDescription
};
return sheetData;
}
async _setApplicableStat(item, ev) {
// Build a JSON Object from the selected tag value and selected name (item data attribute key)
let updateKey = ev.currentTarget.getAttribute("name");
let updateData = ev.target.value;
// Update Item Data
await item.update({[updateKey]: updateData});
}
// Each Skill Category can have up to three Applicable Stats that apply to it. We need to get a list of
// the Stat Shortnames from Config so the user can select which stats are applicable to this Skill Category
prepareApplicableStatNames(config) {
let applicableStatList = {None: "None"};
for (const item in config.rmfrp.stats) {
applicableStatList[config.rmfrp.stats[item].shortname] = config.rmfrp.stats[item].shortname;
}
return applicableStatList;
}
// Get the values for the currently selected Applicable Stat so we can display it on the Skill Category Sheet
// If nothing is selected return an empty string.
prepareApplicableSelectedStat(appStat) {
let applicableStatSelected = "";
applicableStatSelected = this.item.system[appStat];
return applicableStatSelected;
}
// The character sheet has an information field that displays the applicable stats in the following format
// St/Ag/St. This method checks the current applicable stats and builds that field so
// it can be displayed to the user.
buildApplicableStatsText(firstAppStat, secondAppStat, thirdAppStat) {
if (firstAppStat === "None") {
return ("None");
}
else if (firstAppStat !== "None" && secondAppStat === "None") {
return (firstAppStat);
}
else if (firstAppStat !== "None" && secondAppStat !== "None" && thirdAppStat === "None" ) {
return (`${firstAppStat}/${secondAppStat}`);
}
else if (firstAppStat !== "None" && secondAppStat !== "None" && thirdAppStat !== "None" ) {
return (`${firstAppStat}/${secondAppStat}/${thirdAppStat}`);
}
else {
return ("None");
}
}
activateListeners(html) {
super.activateListeners(html);
// -------------------------------------------------------------
// Everything below here is only needed if the sheet is editable
if (!this.isEditable) return;
// Every time the user selects one of the Applicable Stat dropdowns
// fire an event to change the value in the Skill Category
html.find(".stat-selector").change(ev => {
this._setApplicableStat(this.item, ev);
});
// Catch the event when the user clicks one of the New Ranks Checkboxes in a Skill Category.
// It will increment by one or wrap back to zero on a value of three
html.find(".skillcategorysheet-newrank").click(ev => {
switch (ev.currentTarget.getAttribute("value")) {
case "0":
this.object.update({system: {new_ranks: { value: 1 }}});
break;
case "1":
this.object.update({system: {new_ranks: { value: 2 }}});
break;
case "2":
this.object.update({system: {new_ranks: { value: 3 }}});
break;
case "3":
this.object.update({system: {new_ranks: { value: 0 }}});
break;
}
});
}
}

View File

@ -0,0 +1,109 @@
import { RMFRPUtility } from "../../rmfrp-utility.js";
// Our Item Sheet extends the default
export default class RMFRPSkillSheet extends ItemSheet {
// Set the height and width
static get defaultOptions() {
return foundry.utils.mergeObject(super.defaultOptions, {
width: 530,
height: 440,
template: "systems/fvtt-rolemaster-frp/templates/sheets/skills/rmfrp-skill-sheet.html",
classes: ["rmfrp", "sheet", "item"]
});
}
// If our sheet is called here it is.
get template() {
return "systems/fvtt-rolemaster-frp/templates/sheets/skills/rmfrp-skill-sheet.html";
}
// Make the data available to the sheet template
async getData() {
const baseData = await super.getData();
let enrichedDescription = await TextEditor.enrichHTML(this.item.system.description, { async: true });
// Get a list of the parent item's skill categories for the dropdown
let ownedSkillCategories = this.prepareSkillCategoryValues();
// Figure out if a valid Skill Category is already selected
let selectedSkillCategory = this.prepareSelectedSkillCategory(ownedSkillCategories, this.object.system.category);
let sheetData = {
owner: this.item.isOwner,
editable: this.isEditable,
item: baseData.item,
system: baseData.item.system,
config: CONFIG.rmfrp,
owned_skillcats: ownedSkillCategories,
enrichedDescription: enrichedDescription,
selected_skillcat: selectedSkillCategory,
designations: CONFIG.rmfrp.skill_designations
};
return sheetData;
}
activateListeners(html) {
super.activateListeners(html);
// Catch the event when the user clicks one of the New Ranks Checkboxes in a Skill.
// It will increment by one or wrap back to zero on a value of three
html.find(".skillsheet-newrank").click(ev => {
switch (ev.currentTarget.getAttribute("value")) {
case "0":
this.object.update({ system: { new_ranks: { value: 1 } } });
break;
case "1":
this.object.update({ system: { new_ranks: { value: 2 } } });
break;
case "2":
this.object.update({ system: { new_ranks: { value: 3 } } });
break;
case "3":
this.object.update({ system: { new_ranks: { value: 0 } } });
break;
}
});
}
// Skills are related to Skill Categories so we need something to allow the user to choose that relationship
// If this Skill is owned then we will return a list of Skill Categories and allow them to choose
// Otherwise we'll just return 'Skill has no owner'
prepareSkillCategoryValues() {
let skillCategories = RMFRPUtility.getSkillCategories();
if (this.item.isEmbedded) {
skillCategories = this.item.parent.items.filter(it => it.type == "skill_category");
}
//console.log("CATEG", skillCategories);
return (skillCategories);
}
// Determine which Skill Category is selected and test that it is in the current list of categories.
// If it isn't set it to None.
prepareSelectedSkillCategory(ownedSkillCategories, selectedSkillCategory) {
let defaultSelectedCategory = "None";
let skillC = ownedSkillCategories.find(it => it.name.toLowerCase() == selectedSkillCategory.toLowerCase());
if (skillC) {
return (selectedSkillCategory);
} else {
return (defaultSelectedCategory);
}
}
// Populate the Skill Category Bonus field on the Skill Sheet.
// Iterate through the owned skill categories and if one of them matches the item id of currently
// selected skill category then set the Skill Category Bonus field to the Total Bonus field of the Skill Category
prepareSelectedSkillCategoryBonus(selected_skillcat) {
let skillC = this.parent?.items || RMFRPUtility.getSkillCategories();
if (skillC) {
let item = skillC.find(it => it.type == "skill_category" && it.name.toLowerCase() == itemData.system.category.toLowerCase());
if (item) {
this.system.category_bonus = item.system.total_bonus;
return
}
}
ui.notifications.warn("No Skill Categories found for " + this.name + ". Please create and link a Skill Category.");
}
}

View File

@ -0,0 +1,35 @@
// Our Item Sheet extends the default
export default class RMFRPSpellSheet extends ItemSheet {
// Set the height and width
static get defaultOptions() {
return foundry.utils.mergeObject(super.defaultOptions, {
width: 530,
height: 440,
classes: ["rmfrp", "sheet", "item"]
});
}
// If our sheet is called here it is.
get template() {
return "systems/fvtt-rolemaster-frp/templates/sheets/spells/rmfrp-spell-sheet.html";
}
// Make the data available to the sheet template
async getData() {
const baseData = await super.getData();
let enrichedDescription = await TextEditor.enrichHTML(this.item.system.description, {async: true});
let sheetData = {
owner: this.item.isOwner,
editable: this.isEditable,
item: baseData.item,
system: baseData.item.system,
config: CONFIG.rmfrp,
enrichedDescription: enrichedDescription
};
return sheetData;
}
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,968 @@
[
{
"1": "F",
"2": "F",
"3": "F",
"4": "F",
"5": "F",
"6": "F",
"7": "F",
"8": "F",
"9": "F",
"10": "F",
"11": "F",
"12": "F",
"13": "F",
"14": "F",
"15": "F",
"16": "F",
"17": "F",
"18": "F",
"19": "F",
"20": "F",
"Result": "01-02"
},
{
"1": "",
"2": "",
"3": "",
"4": "",
"5": "",
"6": "",
"7": "",
"8": "",
"9": "",
"10": "",
"11": "",
"12": "",
"13": "",
"14": "",
"15": "",
"16": "",
"17": "",
"18": "",
"19": "",
"20": "",
"Result": "03-30"
},
{
"1": "",
"2": "",
"3": "",
"4": "",
"5": "",
"6": "",
"7": "",
"8": "",
"9": "",
"10": "",
"11": "",
"12": "",
"13": "",
"14": "",
"15": "",
"16": "",
"17": "",
"18": "",
"19": "",
"20": "",
"Result": "31-33"
},
{
"1": "",
"2": "",
"3": "",
"4": "",
"5": "",
"6": "",
"7": "",
"8": "",
"9": "",
"10": "",
"11": "",
"12": "",
"13": "",
"14": "",
"15": "",
"16": "",
"17": "",
"18": "",
"19": "",
"20": "",
"Result": "34-36"
},
{
"1": "",
"2": "",
"3": "",
"4": "",
"5": "",
"6": "",
"7": "",
"8": "",
"9": "",
"10": "",
"11": "",
"12": "",
"13": "",
"14": "",
"15": "",
"16": "",
"17": "",
"18": "",
"19": "",
"20": "",
"Result": "37-39"
},
{
"1": "",
"2": "",
"3": "",
"4": "",
"5": "",
"6": "",
"7": "",
"8": "",
"9": "",
"10": "",
"11": "",
"12": "",
"13": "",
"14": "",
"15": "",
"16": "",
"17": "",
"18": "",
"19": "",
"20": "",
"Result": "40-42"
},
{
"1": "",
"2": "",
"3": "",
"4": "",
"5": "",
"6": "",
"7": "",
"8": "",
"9": "",
"10": "",
"11": "",
"12": "",
"13": "",
"14": "",
"15": "",
"16": "",
"17": "",
"18": "",
"19": "",
"20": "",
"Result": "43-45"
},
{
"1": "",
"2": "",
"3": "",
"4": "",
"5": "",
"6": "",
"7": "",
"8": "",
"9": "",
"10": "",
"11": "",
"12": "",
"13": "",
"14": "",
"15": "",
"16": "",
"17": "",
"18": "",
"19": "",
"20": "",
"Result": "46-48"
},
{
"1": "",
"2": "",
"3": "",
"4": "",
"5": "",
"6": "",
"7": "",
"8": "",
"9": "",
"10": "",
"11": "",
"12": "",
"13": "",
"14": "",
"15": "",
"16": "",
"17": "",
"18": "",
"19": "",
"20": "",
"Result": "49-51"
},
{
"1": 1,
"2": "",
"3": "",
"4": "",
"5": "",
"6": "",
"7": "",
"8": "",
"9": "",
"10": "",
"11": "",
"12": "",
"13": "",
"14": "",
"15": "",
"16": "",
"17": "",
"18": "",
"19": "",
"20": "",
"Result": "52-54"
},
{
"1": 1,
"2": 1,
"3": "",
"4": "",
"5": "",
"6": "",
"7": "",
"8": "",
"9": "",
"10": "",
"11": "",
"12": "",
"13": "",
"14": "",
"15": "",
"16": "",
"17": "",
"18": "",
"19": "",
"20": "",
"Result": "55-57"
},
{
"1": 2,
"2": 1,
"3": "",
"4": "",
"5": "",
"6": "",
"7": "",
"8": "",
"9": 1,
"10": "",
"11": "",
"12": "",
"13": "",
"14": "",
"15": "",
"16": "",
"17": 1,
"18": "",
"19": "",
"20": "",
"Result": "58-60"
},
{
"1": "3AT",
"2": 2,
"3": "",
"4": "",
"5": "",
"6": "",
"7": "",
"8": "",
"9": 1,
"10": "",
"11": "",
"12": "",
"13": 1,
"14": "",
"15": "",
"16": "",
"17": 1,
"18": 1,
"19": "",
"20": "",
"Result": "61-63"
},
{
"1": "4BT",
"2": "3AT",
"3": "",
"4": "",
"5": 1,
"6": "",
"7": "",
"8": "",
"9": 2,
"10": "",
"11": "",
"12": "",
"13": 1,
"14": 1,
"15": "",
"16": "",
"17": 2,
"18": 1,
"19": "",
"20": "",
"Result": "64-66"
},
{
"1": "5CT",
"2": "4BT",
"3": 1,
"4": "",
"5": 1,
"6": "",
"7": "",
"8": "",
"9": 3,
"10": 1,
"11": "",
"12": "",
"13": 2,
"14": 1,
"15": 1,
"16": "",
"17": 3,
"18": 2,
"19": "",
"20": "",
"Result": "67-69"
},
{
"1": "6DT",
"2": "5CT",
"3": 1,
"4": "",
"5": 2,
"6": "",
"7": "",
"8": "",
"9": 4,
"10": 1,
"11": "",
"12": "",
"13": 3,
"14": 2,
"15": 1,
"16": 1,
"17": 3,
"18": 2,
"19": "",
"20": "",
"Result": "70-72"
},
{
"1": "7AS",
"2": "6DT",
"3": 2,
"4": "",
"5": "3AT",
"6": 1,
"7": "",
"8": "",
"9": 5,
"10": 2,
"11": "",
"12": "",
"13": 4,
"14": 3,
"15": 2,
"16": 1,
"17": 4,
"18": 3,
"19": "",
"20": "",
"Result": "73-75"
},
{
"1": "8AS",
"2": "7AS",
"3": 3,
"4": 1,
"5": "4BT",
"6": 2,
"7": "",
"8": "",
"9": 5,
"10": 3,
"11": 1,
"12": "",
"13": 4,
"14": 3,
"15": 2,
"16": 2,
"17": 5,
"18": 4,
"19": 1,
"20": "",
"Result": "76-78"
},
{
"1": "9AS",
"2": "7AS",
"3": "4AT",
"4": 1,
"5": "5CT",
"6": "3AT",
"7": 1,
"8": "",
"9": 6,
"10": 4,
"11": 1,
"12": "",
"13": 5,
"14": 4,
"15": 3,
"16": 2,
"17": 5,
"18": 4,
"19": 1,
"20": "",
"Result": "79-81"
},
{
"1": "10AS",
"2": "8AS",
"3": "5BT",
"4": 2,
"5": "6DT",
"6": "4BT",
"7": 1,
"8": 1,
"9": "7AT",
"10": 4,
"11": 2,
"12": 1,
"13": "6AT",
"14": 5,
"15": 3,
"16": 3,
"17": 6,
"18": 5,
"19": 2,
"20": "",
"Result": "82-84"
},
{
"1": "10AS",
"2": "9AS",
"3": "6CT",
"4": 3,
"5": "7AS",
"6": "5CT",
"7": "2AT",
"8": 1,
"9": "8BT",
"10": 5,
"11": 2,
"12": 1,
"13": "7BT",
"14": 6,
"15": 4,
"16": 3,
"17": "7AT",
"18": 6,
"19": 2,
"20": 1,
"Result": "85-87"
},
{
"1": "11AS",
"2": "10AS",
"3": "6DT",
"4": "4AT",
"5": "8AS",
"6": "6DT",
"7": "3BT",
"8": "2AT",
"9": "9CT",
"10": 6,
"11": 3,
"12": 2,
"13": "7CT",
"14": 6,
"15": 5,
"16": 4,
"17": "8BT",
"18": 6,
"19": 3,
"20": 1,
"Result": "88-90"
},
{
"1": "12BS",
"2": "11AS",
"3": "7AS",
"4": "5BT",
"5": "9AS",
"6": "7AS",
"7": "4CT",
"8": "3BT",
"9": "9DT",
"10": "7AT",
"11": 4,
"12": 2,
"13": "8DT",
"14": 7,
"15": 5,
"16": 5,
"17": "8CT",
"18": 7,
"19": 3,
"20": 2,
"Result": "91-93"
},
{
"1": "13BS",
"2": "12BS",
"3": "8AS",
"4": "6CT",
"5": "10AS",
"6": "8AS",
"7": "5DT",
"8": "4CT",
"9": "10AS",
"10": "8BT",
"11": 4,
"12": 3,
"13": "9AS",
"14": "8AT",
"15": 6,
"16": 5,
"17": "9DT",
"18": "8AT",
"19": 4,
"20": 2,
"Result": "94-96"
},
{
"1": "14BS",
"2": "13BS",
"3": "9AS",
"4": "6DT",
"5": "11AS",
"6": "9AK",
"7": "5AK",
"8": "4DT",
"9": "11AS",
"10": "8CT",
"11": "5AT",
"12": 3,
"13": "10AS",
"14": "8BT",
"15": "6AT",
"16": "6AT",
"17": "10AS",
"18": "8BT",
"19": 5,
"20": 3,
"Result": "97-99"
},
{
"1": "15BS",
"2": "14BS",
"3": "10AS",
"4": "7AS",
"5": "12BS",
"6": "10AS",
"7": "6AS",
"8": "5AS",
"9": "12AS",
"10": "9DT",
"11": "6BT",
"12": "4AT",
"13": "10AS",
"14": "9CT",
"15": "7BT",
"16": "6BT",
"17": "10AS",
"18": "9CT",
"19": "5AT",
"20": 3,
"Result": "100-102"
},
{
"1": "16BK",
"2": "14BK",
"3": "11AS",
"4": "8AS",
"5": "13BS",
"6": "11AK",
"7": "7AK",
"8": "6AK",
"9": "13AS",
"10": "10AS",
"11": "6CT",
"12": "5BT",
"13": "11AS",
"14": "10DT",
"15": "8CT",
"16": "7CT",
"17": "11AS",
"18": "10DT",
"19": "6BT",
"20": "4AT",
"Result": "103-105"
},
{
"1": "17CS",
"2": "15CS",
"3": "12BS",
"4": "9AS",
"5": "14BS",
"6": "12BS",
"7": "8AS",
"8": "7AS",
"9": "13AS",
"10": "11AS",
"11": "7DT",
"12": "5CT",
"13": "12AS",
"14": "11AS",
"15": "8DT",
"16": "7DT",
"17": "12AS",
"18": "10AS",
"19": "6CT",
"20": "5BT",
"Result": "106-108"
},
{
"1": "18CK",
"2": "16CK",
"3": "12BS",
"4": "10AS",
"5": "15BK",
"6": "13BK",
"7": "9AK",
"8": "7AK",
"9": "14BS",
"10": "11AK",
"11": "7AK",
"12": "6DT",
"13": "13BS",
"14": "11AK",
"15": "9AK",
"16": "8AK",
"17": "12AS",
"18": "11AK",
"19": "7DT",
"20": "5CT",
"Result": "109-111"
},
{
"1": "19CS",
"2": "17CK",
"3": "13BS",
"4": "11AS",
"5": "16CS",
"6": "14BS",
"7": "10BS",
"8": "8BS",
"9": "15BS",
"10": "12AS",
"11": "8AS",
"12": "6AK",
"13": "13BS",
"14": "12AS",
"15": "9AS",
"16": "9AS",
"17": "13BS",
"18": "12AS",
"19": "8AS",
"20": "6DT",
"Result": "112-114"
},
{
"1": "20DK",
"2": "18CK",
"3": "14BK",
"4": "11AK",
"5": "17CK",
"6": "15BK",
"7": "10BK",
"8": "9BK",
"9": "16BK",
"10": "13BK",
"11": "9AK",
"12": "7AK",
"13": "14BK",
"14": "13AK",
"15": "10AK",
"16": "9AK",
"17": "14BK",
"18": "12AK",
"19": "8AK",
"20": "6AK",
"Result": "115-117"
},
{
"1": "20DS",
"2": "19DS",
"3": "15CS",
"4": "12BS",
"5": "18CS",
"6": "16CS",
"7": "11BS",
"8": "10BS",
"9": "17CS",
"10": "14BS",
"11": "9AS",
"12": "8AS",
"13": "15CS",
"14": "13BS",
"15": "11AS",
"16": "10AS",
"17": "15BS",
"18": "13AS",
"19": "9AS",
"20": "7AK",
"Result": "118-120"
},
{
"1": "21DK",
"2": "20DK",
"3": "16CK",
"4": "13BK",
"5": "19CK",
"6": "17CK",
"7": "12BK",
"8": "11BK",
"9": "17CK",
"10": "15BK",
"11": "10BK",
"12": "8AK",
"13": "16CK",
"14": "14BK",
"15": "11AK",
"16": "10AK",
"17": "15CK",
"18": "14BK",
"19": "9AK",
"20": "7AK",
"Result": "121-123"
},
{
"1": "22DS",
"2": "21DS",
"3": "17CS",
"4": "14BS",
"5": "20CS",
"6": "18CS",
"7": "13CS",
"8": "11CS",
"9": "18CS",
"10": "15CS",
"11": "11BS",
"12": "9AS",
"13": "16CS",
"14": "15BS",
"15": "12BS",
"16": "11BS",
"17": "16CS",
"18": "14BS",
"19": "10BS",
"20": "8AK",
"Result": "124-126"
},
{
"1": "23DK",
"2": "21DK",
"3": "18CK",
"4": "15CK",
"5": "21DK",
"6": "19CK",
"7": "14CK",
"8": "12CK",
"9": "19CK",
"10": "16CK",
"11": "11BK",
"12": "9BK",
"13": "17CK",
"14": "16CK",
"15": "12BK",
"16": "11BK",
"17": "17CK",
"18": "15BK",
"19": "10BK",
"20": "9AK",
"Result": "127-129"
},
{
"1": "24ES",
"2": "22ES",
"3": "18DS",
"4": "16CS",
"5": "22DS",
"6": "20DS",
"7": "15CS",
"8": "13CS",
"9": "20DS",
"10": "17CS",
"11": "12CS",
"12": "10BS",
"13": "18DS",
"14": "16CS",
"15": "13BS",
"16": "12BS",
"17": "17CS",
"18": "16CS",
"19": "11BS",
"20": "9BS",
"Result": "130-132"
},
{
"1": "25EK",
"2": "23EK",
"3": "19DK",
"4": "16CK",
"5": "23DK",
"6": "21DK",
"7": "15CK",
"8": "14CK",
"9": "21DK",
"10": "18DK",
"11": "12CK",
"12": "11BK",
"13": "19DK",
"14": "17CK",
"15": "14CK",
"16": "13CK",
"17": "18DK",
"18": "16CK",
"19": "12CK",
"20": "10BK",
"Result": "133-135"
},
{
"1": "26ES",
"2": "24ES",
"3": "20DS",
"4": "17DS",
"5": "24ES",
"6": "22DS",
"7": "16DS",
"8": "14DS",
"9": "21DS",
"10": "18DS",
"11": "13CS",
"12": "11CS",
"13": "19DS",
"14": "18DS",
"15": "14CS",
"16": "13CS",
"17": "19DS",
"18": "17CS",
"19": "12CS",
"20": "10BS",
"Result": "136-138"
},
{
"1": "27EK",
"2": "25EK",
"3": "21EK",
"4": "18DK",
"5": "25EK",
"6": "23EK",
"7": "17DK",
"8": "15DK",
"9": "22EK",
"10": "19DK",
"11": "14DK",
"12": "12CK",
"13": "20EK",
"14": "18DK",
"15": "15CK",
"16": "14CK",
"17": "19DK",
"18": "18DK",
"19": "13CK",
"20": "11CK",
"Result": "139-141"
},
{
"1": "28ES",
"2": "26ES",
"3": "22ES",
"4": "19ES",
"5": "26ES",
"6": "24ES",
"7": "18ES",
"8": "16ES",
"9": "23ES",
"10": "20ES",
"11": "14DS",
"12": "12DS",
"13": "21ES",
"14": "19DS",
"15": "15DS",
"16": "14DS",
"17": "20ES",
"18": "18DS",
"19": "13DS",
"20": "11CS",
"Result": "142-144"
},
{
"1": "29EK",
"2": "27EK",
"3": "23EK",
"4": "20EK",
"5": "27EK",
"6": "25EK",
"7": "19EK",
"8": "17EK",
"9": "24EK",
"10": "21EK",
"11": "15EK",
"12": "13DK",
"13": "22EK",
"14": "20EK",
"15": "16DK",
"16": "15DK",
"17": "21EK",
"18": "19EK",
"19": "14DK",
"20": "12DK",
"Result": "145-147"
},
{
"1": "30FS\n",
"2": "28FS",
"3": "24ES",
"4": "21ES",
"5": "28FS",
"6": "26ES",
"7": "20ES",
"8": "18ES",
"9": "25FS",
"10": "22ES",
"11": "16ES",
"12": "13ES",
"13": "23FS",
"14": "21ES",
"15": "17ES",
"16": "16ES",
"17": "22FS",
"18": "20ES",
"19": "15ES",
"20": "13ES",
"Result": "148-150"
}
]

View File

@ -0,0 +1,968 @@
[
{
"1": "F",
"2": "F",
"3": "F",
"4": "F",
"5": "F",
"6": "F",
"7": "F",
"8": "F",
"9": "F",
"10": "F",
"11": "F",
"12": "F",
"13": "F",
"14": "F",
"15": "F",
"16": "F",
"17": "F",
"18": "F",
"19": "F",
"20": "F",
"Result": "01-02"
},
{
"1": "",
"2": "",
"3": "",
"4": "",
"5": "",
"6": "",
"7": "",
"8": "",
"9": "",
"10": "",
"11": "",
"12": "",
"13": "",
"14": "",
"15": "",
"16": "",
"17": "",
"18": "",
"19": "",
"20": "",
"Result": "03-30"
},
{
"1": "",
"2": "",
"3": "",
"4": "",
"5": "",
"6": "",
"7": "",
"8": "",
"9": "",
"10": "",
"11": "",
"12": "",
"13": "",
"14": "",
"15": "",
"16": "",
"17": "",
"18": "",
"19": "",
"20": "",
"Result": "31-33"
},
{
"1": "",
"2": "",
"3": "",
"4": "",
"5": "",
"6": "",
"7": "",
"8": "",
"9": "",
"10": "",
"11": "",
"12": "",
"13": "",
"14": "",
"15": "",
"16": "",
"17": "",
"18": "",
"19": "",
"20": "",
"Result": "34-36"
},
{
"1": "",
"2": "",
"3": "",
"4": "",
"5": "",
"6": "",
"7": "",
"8": "",
"9": "",
"10": "",
"11": "",
"12": "",
"13": "",
"14": "",
"15": "",
"16": "",
"17": "",
"18": "",
"19": "",
"20": "",
"Result": "37-39"
},
{
"1": "",
"2": "",
"3": "",
"4": "",
"5": "",
"6": "",
"7": "",
"8": "",
"9": "",
"10": "",
"11": "",
"12": "",
"13": "",
"14": "",
"15": "",
"16": "",
"17": "",
"18": "",
"19": "",
"20": "",
"Result": "40-42"
},
{
"1": "",
"2": "",
"3": "",
"4": "",
"5": "",
"6": "",
"7": "",
"8": "",
"9": "",
"10": "",
"11": "",
"12": "",
"13": "",
"14": "",
"15": "",
"16": "",
"17": "",
"18": "",
"19": "",
"20": "",
"Result": "43-45"
},
{
"1": "",
"2": "",
"3": "",
"4": "",
"5": "",
"6": "",
"7": "",
"8": "",
"9": "",
"10": "",
"11": "",
"12": "",
"13": "",
"14": "",
"15": "",
"16": "",
"17": "",
"18": "",
"19": "",
"20": "",
"Result": "46-48"
},
{
"1": 1,
"2": "",
"3": "",
"4": "",
"5": "",
"6": "",
"7": "",
"8": "",
"9": "",
"10": "",
"11": "",
"12": "",
"13": "",
"14": "",
"15": "",
"16": "",
"17": "",
"18": "",
"19": "",
"20": "",
"Result": "49-51"
},
{
"1": 2,
"2": 1,
"3": "",
"4": "",
"5": "",
"6": "",
"7": "",
"8": "",
"9": "",
"10": "",
"11": "",
"12": "",
"13": "",
"14": "",
"15": "",
"16": "",
"17": "",
"18": "",
"19": "",
"20": "",
"Result": "52-54"
},
{
"1": "3AT",
"2": 2,
"3": "",
"4": "",
"5": "",
"6": "",
"7": "",
"8": "",
"9": "",
"10": "",
"11": "",
"12": "",
"13": "",
"14": "",
"15": "",
"16": "",
"17": "",
"18": "",
"19": "",
"20": "",
"Result": "55-57"
},
{
"1": "5AT",
"2": 3,
"3": "",
"4": "",
"5": 1,
"6": "",
"7": "",
"8": "",
"9": 1,
"10": "",
"11": "",
"12": "",
"13": "",
"14": "",
"15": "",
"16": "",
"17": 1,
"18": "",
"19": "",
"20": "",
"Result": "58-60"
},
{
"1": "6BT",
"2": "4AT",
"3": "",
"4": "",
"5": 2,
"6": 1,
"7": "",
"8": "",
"9": 2,
"10": "",
"11": "",
"12": "",
"13": "",
"14": "",
"15": "",
"16": "",
"17": 1,
"18": "",
"19": "",
"20": "",
"Result": "61-63"
},
{
"1": "7CT",
"2": "6BT",
"3": 1,
"4": "",
"5": 3,
"6": 2,
"7": "",
"8": "",
"9": 3,
"10": "",
"11": "",
"12": "",
"13": 1,
"14": "",
"15": "",
"16": "",
"17": 2,
"18": "",
"19": "",
"20": "",
"Result": "64-66"
},
{
"1": "9DT",
"2": "7CT",
"3": 2,
"4": 1,
"5": "5AT",
"6": 3,
"7": 1,
"8": 1,
"9": 4,
"10": "",
"11": "",
"12": "",
"13": 2,
"14": 1,
"15": "",
"16": "",
"17": 3,
"18": 1,
"19": "",
"20": "",
"Result": "67-69"
},
{
"1": "10ET",
"2": "8DT",
"3": 3,
"4": 2,
"5": "6AT",
"6": "4AT",
"7": 2,
"8": 2,
"9": 5,
"10": "",
"11": "",
"12": "",
"13": 3,
"14": 2,
"15": "",
"16": "",
"17": 4,
"18": 1,
"19": "",
"20": "",
"Result": "70-72"
},
{
"1": "11AS",
"2": "10ET",
"3": 4,
"4": 3,
"5": "7BT",
"6": "6AT",
"7": 3,
"8": "3AT",
"9": 7,
"10": 1,
"11": "",
"12": "",
"13": 4,
"14": 3,
"15": "",
"16": "",
"17": 5,
"18": 2,
"19": "",
"20": "",
"Result": "73-75"
},
{
"1": "13AP",
"2": "11AP",
"3": "5AT",
"4": 4,
"5": "9CT",
"6": "7BT",
"7": "4AT",
"8": "4BT",
"9": 8,
"10": 2,
"11": "",
"12": "",
"13": 5,
"14": 4,
"15": 1,
"16": "",
"17": 6,
"18": 3,
"19": "",
"20": "",
"Result": "76-78"
},
{
"1": "14AS",
"2": "12AS",
"3": "7BT",
"4": 5,
"5": "10DT",
"6": "8CT",
"7": "5BT",
"8": "5CT",
"9": "9AT",
"10": 3,
"11": 1,
"12": "",
"13": 6,
"14": 5,
"15": 1,
"16": 1,
"17": 7,
"18": 4,
"19": "",
"20": "",
"Result": "79-81"
},
{
"1": "15AP",
"2": "14AP",
"3": "8CT",
"4": 6,
"5": "11ET",
"6": "9DT",
"7": "6CT",
"8": "6DT",
"9": "10BT",
"10": "4AT",
"11": 2,
"12": "",
"13": "7AT",
"14": 6,
"15": 2,
"16": 1,
"17": 8,
"18": 5,
"19": 1,
"20": "",
"Result": "82-84"
},
{
"1": "17BS",
"2": "15AS",
"3": "9DT",
"4": "7AT",
"5": "13AS",
"6": "11ET",
"7": "7DT",
"8": "7ET",
"9": "11CT",
"10": "5BT",
"11": 3,
"12": "",
"13": "9AT",
"14": "7AT",
"15": 3,
"16": 2,
"17": "9AT",
"18": 6,
"19": 2,
"20": "",
"Result": "85-87"
},
{
"1": "18BP",
"2": "16AP",
"3": "10ET",
"4": "8BT",
"5": "14AP",
"6": "12AS",
"7": "8ET",
"8": "8AP",
"9": "13DT",
"10": "7CT",
"11": 4,
"12": 1,
"13": "10AT",
"14": "8AT",
"15": "4AT",
"16": "3AT",
"17": "10BT",
"18": "7AT",
"19": 3,
"20": "",
"Result": "88-90"
},
{
"1": "19BS",
"2": "18BS",
"3": "11AP",
"4": "9CT",
"5": "16AS",
"6": "13AP",
"7": "9AP",
"8": "9AP",
"9": "14ET",
"10": "8DT",
"11": "5AT",
"12": 1,
"13": "11BT",
"14": "9BT",
"15": "5AT",
"16": "4AT",
"17": "11CT",
"18": "8BT",
"19": 4,
"20": "",
"Result": "91-93"
},
{
"1": "21BP",
"2": "19BP",
"3": "13AS",
"4": "10DT",
"5": "17AP",
"6": "15AS",
"7": "10AP",
"8": "10AP",
"9": "15AP",
"10": "9ET",
"11": "6BT",
"12": "2AT",
"13": "12CT",
"14": "10CT",
"15": "6AT",
"16": "5BT",
"17": "12DT",
"18": "9CT",
"19": "5AT",
"20": 1,
"Result": "94-96"
},
{
"1": "22BS",
"2": "20BS",
"3": "14AP",
"4": "11ET",
"5": "18BS",
"6": "16AP",
"7": "11AP",
"8": "11AP",
"9": "16AS",
"10": "10AP",
"11": "7CT",
"12": "3AT",
"13": "13DT",
"14": "11DT",
"15": "7BT",
"16": "6CT",
"17": "13ET",
"18": "9DT",
"19": "6AT",
"20": "1AT",
"Result": "97-99"
},
{
"1": "23BP",
"2": "22BP",
"3": "15BS",
"4": "12AP",
"5": "20BP",
"6": "17BS",
"7": "12AP",
"8": "12AP",
"9": "17AP",
"10": "12AS",
"11": "8DT",
"12": "4AT",
"13": "14ET",
"14": "12ET",
"15": "8CT",
"16": "7DT",
"17": "14AP",
"18": "10ET",
"19": "7BT",
"20": "2AT",
"Result": "100-102"
},
{
"1": "25BS",
"2": "23BS",
"3": "16BP",
"4": "13AS",
"5": "21BS",
"6": "18BP",
"7": "13BP",
"8": "13BP",
"9": "19AS",
"10": "13AP",
"11": "9ET",
"12": "5BT",
"13": "15AP",
"14": "13AP",
"15": "8DT",
"16": "8ET",
"17": "15AS",
"18": "11AP",
"19": "8CT",
"20": "3BT",
"Result": "103-105"
},
{
"1": "26CP",
"2": "24BP",
"3": "18BS",
"4": "14AP",
"5": "22CP",
"6": "20BS",
"7": "14BP",
"8": "14BP",
"9": "20BP",
"10": "14AS",
"11": "10AP",
"12": "6CT",
"13": "17BS",
"14": "14AS",
"15": "9ET",
"16": "9AP",
"17": "16AP",
"18": "12AS",
"19": "9DT",
"20": "4CT",
"Result": "106-108"
},
{
"1": "27CS",
"2": "25CS",
"3": "19BP",
"4": "15AS",
"5": "24CS",
"6": "21BP",
"7": "16BP",
"8": "16BP",
"9": "21BS",
"10": "15BP",
"11": "11AP",
"12": "7DT",
"13": "18BP",
"14": "15AP",
"15": "10AP",
"16": "10AP",
"17": "17AS",
"18": "13AP",
"19": "10ET",
"20": "5DT",
"Result": "109-111"
},
{
"1": "29DP",
"2": "27CP",
"3": "20CS",
"4": "16BP",
"5": "25CP",
"6": "22CS",
"7": "17BS",
"8": "17BS",
"9": "22BP",
"10": "17BS",
"11": "12AP",
"12": "8ET",
"13": "19BS",
"14": "16BS",
"15": "11AP",
"16": "11AP",
"17": "18BP",
"18": "14BS",
"19": "11AP",
"20": "6ET",
"Result": "112-114"
},
{
"1": "30DS",
"2": "28DS",
"3": "21CP",
"4": "17BS",
"5": "26CS",
"6": "23CP",
"7": "18CP",
"8": "18CP",
"9": "23CS",
"10": "18BP",
"11": "13AP",
"12": "9AP",
"13": "20CP",
"14": "17BP",
"15": "12AP",
"16": "11AP",
"17": "19BS",
"18": "15BP",
"19": "12AP",
"20": "6AP",
"Result": "115-117"
},
{
"1": "31DP",
"2": "29DP",
"3": "22CS",
"4": "18BP",
"5": "28DP",
"6": "25CS",
"7": "19CS",
"8": "19CS",
"9": "25CP",
"10": "19CS",
"11": "14BP",
"12": "10AP",
"13": "21CS",
"14": "18BS",
"15": "13BS",
"16": "12BS",
"17": "20BP",
"18": "16BS",
"19": "13AP",
"20": "7AP",
"Result": "118-120"
},
{
"1": "33DS",
"2": "31DS",
"3": "24CP",
"4": "19CS",
"5": "29DS",
"6": "26CP",
"7": "20CP",
"8": "20CP",
"9": "26CS",
"10": "20CP",
"11": "15BS",
"12": "11AP",
"13": "22CP",
"14": "19BP",
"15": "14BP",
"16": "13BP",
"17": "21CS",
"18": "17BP",
"19": "14BP",
"20": "8AP",
"Result": "121-123"
},
{
"1": "34EP",
"2": "32DP",
"3": "25DS",
"4": "20CP",
"5": "31DP",
"6": "27DS",
"7": "21CS",
"8": "21CS",
"9": "27CP",
"10": "22CS",
"11": "16BP",
"12": "12BP",
"13": "23CS",
"14": "20CS",
"15": "15BS",
"16": "14BS",
"17": "22CP",
"18": "17CS",
"19": "15BS",
"20": "9AP",
"Result": "124-126"
},
{
"1": "35ES",
"2": "33ES",
"3": "26DP",
"4": "21CS",
"5": "32DS",
"6": "29DP",
"7": "22CP",
"8": "22DP",
"9": "28DS",
"10": "23DP",
"11": "17BS",
"12": "13BP",
"13": "25DP",
"14": "21CP",
"15": "15BP",
"16": "15BP",
"17": "23CS",
"18": "18CP",
"19": "16BP",
"20": "10BP",
"Result": "127-129"
},
{
"1": "37EP",
"2": "35EP",
"3": "27DS",
"4": "22DP",
"5": "33EP",
"6": "30DS",
"7": "23DS",
"8": "23DS",
"9": "29DP",
"10": "24DS",
"11": "18CP",
"12": "14BS",
"13": "26DS",
"14": "22CS",
"15": "16CS",
"16": "16CS",
"17": "24DP",
"18": "19CS",
"19": "17BS",
"20": "11BS",
"Result": "130-132"
},
{
"1": "38ES",
"2": "36ES",
"3": "28DP",
"4": "23DS",
"5": "35ES",
"6": "31DP",
"7": "24DP",
"8": "24DP",
"9": "31DS",
"10": "25DP",
"11": "19CS",
"12": "15BP",
"13": "27DP",
"14": "23CP",
"15": "17CP",
"16": "17CP",
"17": "25DS",
"18": "20CP",
"19": "18CP",
"20": "11BP",
"Result": "133-135"
},
{
"1": "39EP",
"2": "37EP",
"3": "30ES",
"4": "24DP",
"5": "36EP",
"6": "32ES",
"7": "25DS",
"8": "25DS",
"9": "32DP",
"10": "27DS",
"11": "20CP",
"12": "16CS",
"13": "28DS",
"14": "24CS",
"15": "18CS",
"16": "18CS",
"17": "26DP",
"18": "21CS",
"19": "19CS",
"20": "12BS",
"Result": "136-138"
},
{
"1": "41ES",
"2": "39ES",
"3": "31EP",
"4": "25ES",
"5": "37ES",
"6": "34EP",
"7": "26EP",
"8": "26EP",
"9": "33ES",
"10": "28EP",
"11": "21CS",
"12": "17CP",
"13": "29EP",
"14": "25DP",
"15": "19CP",
"16": "19CP",
"17": "27ES",
"18": "22DP",
"19": "20CP",
"20": "13CP",
"Result": "139-141"
},
{
"1": "42EP",
"2": "40EP",
"3": "32EK",
"4": "26EP",
"5": "39EP",
"6": "35EK",
"7": "27EK",
"8": "27EK",
"9": "34EP",
"10": "29EK",
"11": "22DP",
"12": "18CK",
"13": "30EK",
"14": "26DK",
"15": "20DK",
"16": "20DK",
"17": "28EP",
"18": "23DK",
"19": "21DK",
"20": "14CK",
"Result": "142-144"
},
{
"1": "43ES",
"2": "41ES",
"3": "33ES",
"4": "27ES",
"5": "40ES",
"6": "36ES",
"7": "28ES",
"8": "28ES",
"9": "35ES",
"10": "30ES",
"11": "23DS",
"12": "19DS",
"13": "31ES",
"14": "27ES",
"15": "21DS",
"16": "21DS",
"17": "29ES",
"18": "24ES",
"19": "22DS",
"20": "15DS",
"Result": "145-147"
},
{
"1": "45FP\n",
"2": "43FP",
"3": "35EP",
"4": "29EP",
"5": "42FP",
"6": "38EP",
"7": "29EP",
"8": "29EP",
"9": "37FP",
"10": "32EP",
"11": "25EP",
"12": "20EP",
"13": "33FP",
"14": "28EP",
"15": "22EP",
"16": "22EP",
"17": "30FP",
"18": "25EP",
"19": "23EP",
"20": "16EP",
"Result": "148-150"
}
]

2279
module/tables_data/bola.json Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,968 @@
[
{
"1": "F",
"2": "F",
"3": "F",
"4": "F",
"5": "F",
"6": "F",
"7": "F",
"8": "F",
"9": "F",
"10": "F",
"11": "F",
"12": "F",
"13": "F",
"14": "F",
"15": "F",
"16": "F",
"17": "F",
"18": "F",
"19": "F",
"20": "F",
"Result": "01-02"
},
{
"1": "",
"2": "",
"3": "",
"4": "",
"5": "",
"6": "",
"7": "",
"8": "",
"9": "",
"10": "",
"11": "",
"12": "",
"13": "",
"14": "",
"15": "",
"16": "",
"17": "",
"18": "",
"19": "",
"20": "",
"Result": "03-30"
},
{
"1": "",
"2": "",
"3": "",
"4": "",
"5": "",
"6": "",
"7": "",
"8": 2,
"9": "",
"10": "",
"11": "",
"12": "",
"13": "",
"14": "",
"15": "",
"16": "",
"17": "",
"18": "",
"19": "",
"20": "",
"Result": "31-33"
},
{
"1": "",
"2": "",
"3": "",
"4": "",
"5": "",
"6": "",
"7": 2,
"8": 2,
"9": "",
"10": "",
"11": "",
"12": "",
"13": "",
"14": "",
"15": "",
"16": "",
"17": "",
"18": "",
"19": "",
"20": "",
"Result": "34-36"
},
{
"1": "",
"2": "",
"3": "",
"4": "",
"5": "",
"6": "",
"7": 2,
"8": 2,
"9": "",
"10": "",
"11": "",
"12": "",
"13": "",
"14": "",
"15": "",
"16": "",
"17": "",
"18": "",
"19": "",
"20": "",
"Result": "37-39"
},
{
"1": "",
"2": "",
"3": "",
"4": "",
"5": "",
"6": 2,
"7": 2,
"8": 3,
"9": "",
"10": "",
"11": "",
"12": "",
"13": "",
"14": "",
"15": "",
"16": 1,
"17": "",
"18": "",
"19": 1,
"20": "",
"Result": "40-42"
},
{
"1": "",
"2": "",
"3": "",
"4": "",
"5": 2,
"6": 3,
"7": 3,
"8": 3,
"9": "",
"10": "",
"11": "",
"12": 1,
"13": "",
"14": 1,
"15": 1,
"16": 2,
"17": "",
"18": 1,
"19": 1,
"20": 1,
"Result": "43-45"
},
{
"1": "",
"2": "",
"3": "",
"4": "",
"5": 2,
"6": 3,
"7": 3,
"8": 3,
"9": "",
"10": "",
"11": "",
"12": 1,
"13": "",
"14": 1,
"15": 1,
"16": 2,
"17": 1,
"18": 1,
"19": 1,
"20": 1,
"Result": "46-48"
},
{
"1": "",
"2": 4,
"3": "",
"4": "",
"5": 2,
"6": 3,
"7": 3,
"8": 4,
"9": "",
"10": 1,
"11": "",
"12": 1,
"13": 1,
"14": 1,
"15": 2,
"16": 2,
"17": 1,
"18": 1,
"19": 2,
"20": 1,
"Result": "49-51"
},
{
"1": "",
"2": 4,
"3": "",
"4": "",
"5": 3,
"6": 3,
"7": 4,
"8": 4,
"9": "",
"10": 2,
"11": "",
"12": 2,
"13": 1,
"14": 2,
"15": 2,
"16": 2,
"17": 2,
"18": 1,
"19": 2,
"20": 1,
"Result": "52-54"
},
{
"1": "",
"2": 5,
"3": "",
"4": 1,
"5": 3,
"6": 4,
"7": 4,
"8": 4,
"9": 1,
"10": 2,
"11": 1,
"12": 2,
"13": 2,
"14": 2,
"15": 2,
"16": 2,
"17": 2,
"18": 2,
"19": 2,
"20": 2,
"Result": "55-57"
},
{
"1": "",
"2": 5,
"3": "",
"4": 2,
"5": 4,
"6": 4,
"7": 4,
"8": 5,
"9": 2,
"10": 2,
"11": 2,
"12": 2,
"13": 2,
"14": 2,
"15": 2,
"16": 2,
"17": 2,
"18": 2,
"19": 2,
"20": 2,
"Result": "58-60"
},
{
"1": 4,
"2": 5,
"3": 3,
"4": 2,
"5": 4,
"6": 5,
"7": 5,
"8": 5,
"9": 2,
"10": 3,
"11": 2,
"12": 2,
"13": 2,
"14": 3,
"15": 2,
"16": 3,
"17": 2,
"18": 2,
"19": 2,
"20": 2,
"Result": "61-63"
},
{
"1": 5,
"2": 6,
"3": 3,
"4": 3,
"5": 5,
"6": 5,
"7": 5,
"8": 5,
"9": 2,
"10": 3,
"11": 2,
"12": 3,
"13": 2,
"14": 3,
"15": 3,
"16": 3,
"17": 2,
"18": 2,
"19": 2,
"20": 2,
"Result": "64-66"
},
{
"1": 5,
"2": 6,
"3": 4,
"4": 3,
"5": 5,
"6": 5,
"7": 5,
"8": 6,
"9": 3,
"10": 3,
"11": 2,
"12": 3,
"13": 3,
"14": 3,
"15": 3,
"16": 3,
"17": 2,
"18": 2,
"19": 2,
"20": 2,
"Result": "67-69"
},
{
"1": 5,
"2": 7,
"3": 4,
"4": 3,
"5": "6A",
"6": 6,
"7": 5,
"8": 6,
"9": 3,
"10": 4,
"11": 3,
"12": 3,
"13": 3,
"14": 3,
"15": 3,
"16": 3,
"17": 3,
"18": 3,
"19": 3,
"20": 2,
"Result": "70-72"
},
{
"1": 6,
"2": "7A",
"3": 5,
"4": 4,
"5": "6A",
"6": 6,
"7": 6,
"8": 6,
"9": "4A",
"10": 4,
"11": 3,
"12": 3,
"13": 3,
"14": 4,
"15": 3,
"16": 4,
"17": 3,
"18": 3,
"19": 3,
"20": 2,
"Result": "73-75"
},
{
"1": 7,
"2": "8A",
"3": 5,
"4": 4,
"5": "7A",
"6": "7A",
"7": 6,
"8": 6,
"9": "4A",
"10": 4,
"11": 3,
"12": 4,
"13": "4A",
"14": 4,
"15": 4,
"16": 4,
"17": 3,
"18": 3,
"19": 3,
"20": 2,
"Result": "76-78"
},
{
"1": 7,
"2": "8A",
"3": 6,
"4": 5,
"5": "7A",
"6": "7A",
"7": "6A",
"8": 7,
"9": "4A",
"10": 5,
"11": 4,
"12": 4,
"13": "4A",
"14": 4,
"15": 4,
"16": 4,
"17": "3A",
"18": 3,
"19": 3,
"20": 3,
"Result": "79-81"
},
{
"1": "8A",
"2": "8A",
"3": 6,
"4": 5,
"5": "8A",
"6": "7A",
"7": "7A",
"8": 7,
"9": "5A",
"10": "5A",
"11": 4,
"12": 4,
"13": "4A",
"14": 4,
"15": 4,
"16": 4,
"17": "4A",
"18": 3,
"19": 3,
"20": 3,
"Result": "82-84"
},
{
"1": "8A",
"2": "9A",
"3": 7,
"4": 6,
"5": "8A",
"6": "8A",
"7": "7A",
"8": "7A",
"9": "5A",
"10": "5A",
"11": 4,
"12": 5,
"13": "4A",
"14": "5A",
"15": 4,
"16": 4,
"17": "4A",
"18": 4,
"19": 3,
"20": 3,
"Result": "85-87"
},
{
"1": "9A",
"2": "9A",
"3": "7A",
"4": 6,
"5": "9A",
"6": "8A",
"7": "7A",
"8": "8A",
"9": "5A",
"10": "6A",
"11": "5A",
"12": 5,
"13": "5A",
"14": "5A",
"15": 4,
"16": 5,
"17": "4A",
"18": 4,
"19": 3,
"20": 3,
"Result": "88-90"
},
{
"1": "9A",
"2": "10B",
"3": "8A",
"4": "6A",
"5": "9B",
"6": "9A",
"7": "8A",
"8": "8A",
"9": "6A",
"10": "6A",
"11": "5A",
"12": "5A",
"13": "5A",
"14": "5A",
"15": "5A",
"16": 5,
"17": "4A",
"18": "4A",
"19": 4,
"20": 3,
"Result": "91-93"
},
{
"1": "10A",
"2": "10B",
"3": "8A",
"4": "7A",
"5": "9B",
"6": "9B",
"7": "8A",
"8": "8A",
"9": "6B",
"10": "7A",
"11": "5A",
"12": "5A",
"13": "5A",
"14": "6A",
"15": "5A",
"16": "5A",
"17": "4A",
"18": "4A",
"19": 4,
"20": 3,
"Result": "94-96"
},
{
"1": "10A",
"2": "11B",
"3": "8A",
"4": "7A",
"5": "10B",
"6": "9B",
"7": "8B",
"8": "9A",
"9": "7B",
"10": "7A",
"11": "6A",
"12": "6A",
"13": "6B",
"14": "6A",
"15": "5A",
"16": "5A",
"17": "5A",
"18": "4A",
"19": 4,
"20": 3,
"Result": "97-99"
},
{
"1": "11B",
"2": "11B",
"3": "9A",
"4": "8A",
"5": "10B",
"6": "10B",
"7": "9B",
"8": "9A",
"9": "7B",
"10": "7A",
"11": "6A",
"12": "6A",
"13": "6B",
"14": "6A",
"15": "5A",
"16": "5A",
"17": "5A",
"18": "4A",
"19": "4A",
"20": 3,
"Result": "100-102"
},
{
"1": "11B",
"2": "11B",
"3": "9B",
"4": "8A",
"5": "11B",
"6": "10B",
"7": "9B",
"8": "9B",
"9": "7B",
"10": "8B",
"11": "6A",
"12": "6A",
"13": "6B",
"14": "6B",
"15": "6A",
"16": "6A",
"17": "5A",
"18": "5A",
"19": "4A",
"20": "4A",
"Result": "103-105"
},
{
"1": "12B",
"2": "12C",
"3": "10B",
"4": "9A",
"5": "11B",
"6": "11B",
"7": "9B",
"8": "10B",
"9": "8B",
"10": "8B",
"11": "7B",
"12": "6A",
"13": "6B",
"14": "7B",
"15": "6A",
"16": "6A",
"17": "5B",
"18": "5A",
"19": "4A",
"20": "4A",
"Result": "106-108"
},
{
"1": "12B",
"2": "12C",
"3": "10B",
"4": "9B",
"5": "12C",
"6": "11B",
"7": "10B",
"8": "10B",
"9": "8B",
"10": "8B",
"11": "7B",
"12": "7A",
"13": "7B",
"14": "7B",
"15": "6A",
"16": "6A",
"17": "6B",
"18": "5A",
"19": "5A",
"20": "4A",
"Result": "109-111"
},
{
"1": "13C",
"2": "13C",
"3": "11B",
"4": "10B",
"5": "12C",
"6": "11C",
"7": "10C",
"8": "10B",
"9": "8C",
"10": "9B",
"11": "7B",
"12": "7B",
"13": "7B",
"14": "7B",
"15": "6B",
"16": "6A",
"17": "6B",
"18": "5A",
"19": "5A",
"20": "4A",
"Result": "112-114"
},
{
"1": "13C",
"2": "13C",
"3": "11B",
"4": "10B",
"5": "13C",
"6": "12C",
"7": "10C",
"8": "10B",
"9": "9C",
"10": "9B",
"11": "7B",
"12": "7B",
"13": "7C",
"14": "7B",
"15": "6B",
"16": "7B",
"17": "6B",
"18": "5A",
"19": "5A",
"20": "4A",
"Result": "115-117"
},
{
"1": "14C",
"2": "14C",
"3": "12C",
"4": "10B",
"5": "13C",
"6": "12C",
"7": "11C",
"8": "11B",
"9": "9C",
"10": "9C",
"11": "8B",
"12": "7B",
"13": "8C",
"14": "8C",
"15": "7B",
"16": "7B",
"17": "6B",
"18": "6A",
"19": "5A",
"20": "4A",
"Result": "118-120"
},
{
"1": "14C",
"2": "14D",
"3": "12C",
"4": "11C",
"5": "14C",
"6": "13C",
"7": "11C",
"8": "11C",
"9": "10C",
"10": "10C",
"11": "8B",
"12": "8B",
"13": "8C",
"14": "8C",
"15": "7B",
"16": "7B",
"17": "6C",
"18": "6B",
"19": "5A",
"20": "4A",
"Result": "121-123"
},
{
"1": "15D",
"2": "14D",
"3": "13C",
"4": "11C",
"5": "14C",
"6": "13C",
"7": "11C",
"8": "11C",
"9": "10C",
"10": "10C",
"11": "8C",
"12": "8B",
"13": "8C",
"14": "8C",
"15": "7C",
"16": "7B",
"17": "7C",
"18": "6B",
"19": "5A",
"20": "4A",
"Result": "124-126"
},
{
"1": "15D",
"2": "15D",
"3": "13C",
"4": "12C",
"5": "15D",
"6": "14C",
"7": "12C",
"8": "12C",
"9": "10C",
"10": "10C",
"11": "9C",
"12": "8C",
"13": "8C",
"14": "9C",
"15": "7C",
"16": "7C",
"17": "7C",
"18": "6B",
"19": "5A",
"20": "5A",
"Result": "127-129"
},
{
"1": "16D",
"2": "15D",
"3": "14D",
"4": "12C",
"5": "15D",
"6": "14D",
"7": "12D",
"8": "12C",
"9": "11D",
"10": "11C",
"11": "9C",
"12": "8C",
"13": "9C",
"14": "9C",
"15": "8C",
"16": "8C",
"17": "7C",
"18": "6B",
"19": "6A",
"20": "5A",
"Result": "130-132"
},
{
"1": "16D",
"2": "16D",
"3": "14D",
"4": "13C",
"5": "16D",
"6": "14D",
"7": "12D",
"8": "12C",
"9": "11D",
"10": "11C",
"11": "9C",
"12": "9C",
"13": "9D",
"14": "9D",
"15": "8C",
"16": "8C",
"17": "7D",
"18": "7C",
"19": "6B",
"20": "5B",
"Result": "133-135"
},
{
"1": "17E",
"2": "16E",
"3": "14D",
"4": "13D",
"5": "16D",
"6": "15D",
"7": "13D",
"8": "13D",
"9": "11D",
"10": "11D",
"11": "10C",
"12": "9C",
"13": "9D",
"14": "9D",
"15": "8C",
"16": "8C",
"17": "8D",
"18": "7C",
"19": "6B",
"20": "5B",
"Result": "136-138"
},
{
"1": "17E",
"2": "17E",
"3": "15D",
"4": "14D",
"5": "16E",
"6": "15E",
"7": "13D",
"8": "13D",
"9": "12D",
"10": "12D",
"11": "10D",
"12": "9C",
"13": "10D",
"14": "10E",
"15": "8D",
"16": "8D",
"17": "8D",
"18": "7C",
"19": "6B",
"20": "5B",
"Result": "139-141"
},
{
"1": "18E",
"2": "17E",
"3": "15E",
"4": "14D",
"5": "17E",
"6": "16E",
"7": "13E",
"8": "13D",
"9": "12E",
"10": "12D",
"11": "10D",
"12": "9D",
"13": "10E",
"14": "10E",
"15": "8D",
"16": "8D",
"17": "8E",
"18": "7D",
"19": "6C",
"20": "5C",
"Result": "142-144"
},
{
"1": "18E",
"2": "17E",
"3": "16E",
"4": "14E",
"5": "17E",
"6": "16E",
"7": "14E",
"8": "14E",
"9": "13E",
"10": "13E",
"11": "11E",
"12": "10D",
"13": "10E",
"14": "10E",
"15": "9D",
"16": "9D",
"17": "8E",
"18": "7D",
"19": "6C",
"20": "5C",
"Result": "145-147"
},
{
"1": "19E\n",
"2": "18E",
"3": "16E",
"4": "15E",
"5": "18E",
"6": "16E",
"7": "14E",
"8": "14E",
"9": "13E",
"10": "13E",
"11": "11E",
"12": "10E",
"13": "10E",
"14": "10E",
"15": "9D",
"16": "9D",
"17": "8E",
"18": "7D",
"19": "6D",
"20": "5D",
"Result": "148-150"
}
]

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,968 @@
[
{
"1": "F",
"2": "F",
"3": "F",
"4": "F",
"5": "F",
"6": "F",
"7": "F",
"8": "F",
"9": "F",
"10": "F",
"11": "F",
"12": "F",
"13": "F",
"14": "F",
"15": "F",
"16": "F",
"17": "F",
"18": "F",
"19": "F",
"20": "F",
"Result": "01-02"
},
{
"1": "",
"2": "",
"3": "",
"4": "",
"5": "",
"6": "",
"7": "",
"8": "",
"9": "",
"10": "",
"11": "",
"12": "",
"13": "",
"14": "",
"15": "",
"16": "",
"17": "",
"18": "",
"19": "",
"20": "",
"Result": "03-30"
},
{
"1": "",
"2": "",
"3": "",
"4": "",
"5": "",
"6": "",
"7": "",
"8": "",
"9": "",
"10": "",
"11": "",
"12": "",
"13": "",
"14": "",
"15": "",
"16": "",
"17": "",
"18": "",
"19": "",
"20": "",
"Result": "31-33"
},
{
"1": "",
"2": "",
"3": "",
"4": "",
"5": "",
"6": "",
"7": "",
"8": "",
"9": "",
"10": "",
"11": "",
"12": "",
"13": "",
"14": "",
"15": "",
"16": "",
"17": "",
"18": "",
"19": "",
"20": "",
"Result": "34-36"
},
{
"1": 1,
"2": "",
"3": "",
"4": "",
"5": "",
"6": "",
"7": "",
"8": "",
"9": "",
"10": "",
"11": "",
"12": "",
"13": "",
"14": "",
"15": "",
"16": "",
"17": "",
"18": "",
"19": "",
"20": "",
"Result": "37-39"
},
{
"1": 1,
"2": 1,
"3": "",
"4": "",
"5": "",
"6": "",
"7": "",
"8": "",
"9": "",
"10": "",
"11": "",
"12": "",
"13": "",
"14": "",
"15": "",
"16": "",
"17": "",
"18": "",
"19": "",
"20": "",
"Result": "40-42"
},
{
"1": 2,
"2": 1,
"3": "",
"4": "",
"5": "",
"6": "",
"7": "",
"8": "",
"9": "",
"10": "",
"11": "",
"12": "",
"13": "",
"14": "",
"15": "",
"16": "",
"17": "",
"18": "",
"19": "",
"20": "",
"Result": "43-45"
},
{
"1": 2,
"2": 2,
"3": "",
"4": "",
"5": "",
"6": "",
"7": "",
"8": "",
"9": "",
"10": "",
"11": "",
"12": "",
"13": "",
"14": "",
"15": "",
"16": "",
"17": "",
"18": "",
"19": "",
"20": "",
"Result": "46-48"
},
{
"1": 3,
"2": 2,
"3": "",
"4": "",
"5": 1,
"6": "",
"7": "",
"8": "",
"9": "",
"10": "",
"11": "",
"12": "",
"13": "",
"14": "",
"15": "",
"16": "",
"17": "",
"18": "",
"19": "",
"20": "",
"Result": "49-51"
},
{
"1": "4AT",
"2": 3,
"3": 1,
"4": "",
"5": 1,
"6": "",
"7": "",
"8": "",
"9": 1,
"10": "",
"11": "",
"12": "",
"13": "",
"14": "",
"15": "",
"16": "",
"17": "",
"18": "",
"19": "",
"20": "",
"Result": "52-54"
},
{
"1": "4AT",
"2": "4AT",
"3": 1,
"4": "",
"5": 2,
"6": "",
"7": "",
"8": "",
"9": 1,
"10": "",
"11": "",
"12": "",
"13": "",
"14": "",
"15": "",
"16": "",
"17": 1,
"18": "",
"19": "",
"20": "",
"Result": "55-57"
},
{
"1": "5BT",
"2": "4BT",
"3": 2,
"4": "",
"5": 3,
"6": 1,
"7": "",
"8": "",
"9": 2,
"10": "",
"11": "",
"12": "",
"13": 1,
"14": "",
"15": "",
"16": "",
"17": 1,
"18": "",
"19": "",
"20": "",
"Result": "58-60"
},
{
"1": "6CT",
"2": "5CT",
"3": 2,
"4": 1,
"5": 3,
"6": 1,
"7": "",
"8": "",
"9": 2,
"10": 1,
"11": "",
"12": "",
"13": 1,
"14": 1,
"15": "",
"16": "",
"17": 2,
"18": 1,
"19": "",
"20": "",
"Result": "61-63"
},
{
"1": "6DT",
"2": "6DT",
"3": 3,
"4": 1,
"5": 4,
"6": 2,
"7": "",
"8": "",
"9": 3,
"10": 1,
"11": "",
"12": "",
"13": 2,
"14": 1,
"15": "",
"16": "",
"17": 2,
"18": 1,
"19": "",
"20": "",
"Result": "64-66"
},
{
"1": "7ET",
"2": "6ET",
"3": 4,
"4": 2,
"5": "5AT",
"6": 3,
"7": 1,
"8": 1,
"9": 3,
"10": 2,
"11": "",
"12": "",
"13": 2,
"14": 2,
"15": 1,
"16": "",
"17": 3,
"18": 2,
"19": "",
"20": "",
"Result": "67-69"
},
{
"1": "8AS",
"2": "7AS",
"3": 4,
"4": 2,
"5": "5AT",
"6": 3,
"7": 1,
"8": 1,
"9": 4,
"10": 2,
"11": 1,
"12": "",
"13": 3,
"14": 2,
"15": 1,
"16": 1,
"17": 3,
"18": 2,
"19": "",
"20": "",
"Result": "70-72"
},
{
"1": "8AS",
"2": "8AS",
"3": "5AT",
"4": 3,
"5": "6BT",
"6": "4AT",
"7": 2,
"8": 2,
"9": 5,
"10": 3,
"11": 1,
"12": "",
"13": 4,
"14": 3,
"15": 1,
"16": 1,
"17": 4,
"18": 3,
"19": 1,
"20": "",
"Result": "73-75"
},
{
"1": "9AS",
"2": "8AS",
"3": "6BT",
"4": 4,
"5": "7CT",
"6": "5AT",
"7": 2,
"8": 2,
"9": "5AT",
"10": 3,
"11": 2,
"12": 1,
"13": 4,
"14": 3,
"15": 2,
"16": 2,
"17": 4,
"18": 3,
"19": 1,
"20": "",
"Result": "76-78"
},
{
"1": "10AS",
"2": "9AS",
"3": "6CT",
"4": 4,
"5": "7DT",
"6": "5BT",
"7": "3AT",
"8": 3,
"9": "6BT",
"10": 4,
"11": 2,
"12": 1,
"13": "5AT",
"14": 4,
"15": 2,
"16": 2,
"17": 5,
"18": 4,
"19": 1,
"20": "",
"Result": "79-81"
},
{
"1": "10AS",
"2": "9AS",
"3": "7DT",
"4": 5,
"5": "8ET",
"6": "6CT",
"7": "3BT",
"8": "3AT",
"9": "6CT",
"10": 5,
"11": 3,
"12": 1,
"13": "5AT",
"14": 4,
"15": 3,
"16": 3,
"17": "5AT",
"18": 4,
"19": 2,
"20": "",
"Result": "82-84"
},
{
"1": "11AS",
"2": "10BS",
"3": "7ET",
"4": "5AT",
"5": "9AS",
"6": "7DT",
"7": "4CT",
"8": "4BT",
"9": "7DT",
"10": "5AT",
"11": 3,
"12": 2,
"13": "6AT",
"14": 5,
"15": 3,
"16": 3,
"17": "6BT",
"18": 5,
"19": 2,
"20": 1,
"Result": "85-87"
},
{
"1": "12BS",
"2": "11BS",
"3": "8AS",
"4": "6BT",
"5": "9AS",
"6": "7ET",
"7": "4DT",
"8": "4CT",
"9": "8ET",
"10": "6BT",
"11": 4,
"12": 2,
"13": "7BT",
"14": "5AT",
"15": 4,
"16": 4,
"17": "7CT",
"18": 5,
"19": 3,
"20": 1,
"Result": "88-90"
},
{
"1": "12BS",
"2": "11BS",
"3": "9AS",
"4": "7CT",
"5": "10AS",
"6": "8AS",
"7": "5ET",
"8": "5DT",
"9": "8AS",
"10": "6CT",
"11": 4,
"12": 3,
"13": "7CT",
"14": "6AT",
"15": 4,
"16": 4,
"17": "7DT",
"18": "6AT",
"19": 3,
"20": 1,
"Result": "91-93"
},
{
"1": "13BS",
"2": "12BS",
"3": "9AS",
"4": "7DT",
"5": "11AS",
"6": "9AS",
"7": "5AS",
"8": "5ET",
"9": "9AS",
"10": "7DT",
"11": "5AT",
"12": 3,
"13": "8DT",
"14": "7BT",
"15": 5,
"16": 5,
"17": "8ET",
"18": "6BT",
"19": "4AT",
"20": 2,
"Result": "94-96"
},
{
"1": "13BS",
"2": "13BS",
"3": "10AS",
"4": "8ET",
"5": "11BS",
"6": "9AS",
"7": "6AS",
"8": "6AS",
"9": "9AS",
"10": "8ET",
"11": "5BT",
"12": 4,
"13": "8ET",
"14": "7CT",
"15": "5AT",
"16": "5AT",
"17": "8AS",
"18": "7CT",
"19": "4AT",
"20": 2,
"Result": "97-99"
},
{
"1": "14BS",
"2": "13BS",
"3": "11BS",
"4": "9AS",
"5": "12BS",
"6": "10AS",
"7": "6AS",
"8": "6AS",
"9": "10BS",
"10": "8AS",
"11": "6CT",
"12": "4AT",
"13": "9AS",
"14": "8DT",
"15": "6AT",
"16": "6AT",
"17": "9AS",
"18": "7DT",
"19": "5BT",
"20": 13,
"Result": "100-102"
},
{
"1": "15BP",
"2": "14BS",
"3": "11BS",
"4": "9AS",
"5": "13BS",
"6": "11BS",
"7": "7BS",
"8": "7AS",
"9": "11BS",
"10": "9AP",
"11": "6DT",
"12": "5AT",
"13": "10BS",
"14": "8ET",
"15": "6AT",
"16": "6BT",
"17": "9AS",
"18": "8ET",
"19": "5CT",
"20": "3AT",
"Result": "103-105"
},
{
"1": "15CS",
"2": "15BP",
"3": "12BS",
"4": "10AS",
"5": "13CS",
"6": "11BS",
"7": "7BS",
"8": "7AS",
"9": "11BS",
"10": "9AS",
"11": "7ET",
"12": "5AT",
"13": "10BS",
"14": "9AS",
"15": "7BT",
"16": "7CT",
"17": "10AS",
"18": "8AP",
"19": "6DT",
"20": "4AT",
"Result": "106-108"
},
{
"1": "16CP",
"2": "15CS",
"3": "12BS",
"4": "10AS",
"5": "14CS",
"6": "12BS",
"7": "8BS",
"8": "8AS",
"9": "12CS",
"10": "10AP",
"11": "8AP",
"12": "6BT",
"13": "11BS",
"14": "9AP",
"15": "7CT",
"16": "7DT",
"17": "10AS",
"18": "9AS",
"19": "6ET",
"20": "4BT",
"Result": "109-111"
},
{
"1": "17DS",
"2": "16CP",
"3": "13CS",
"4": "11BS",
"5": "15CP",
"6": "13CS",
"7": "8BS",
"8": "8BS",
"9": "12CS",
"10": "10AS",
"11": "8AS",
"12": "6CT",
"13": "11CP",
"14": "10BS",
"15": "8DT",
"16": "8ET",
"17": "11BS",
"18": "9AP",
"19": "7AS",
"20": "4CT",
"Result": "112-114"
},
{
"1": "17DP",
"2": "16DS",
"3": "14CP",
"4": "12BS",
"5": "15CS",
"6": "13CP",
"7": "9CS",
"8": "9BS",
"9": "13CP",
"10": "11BP",
"11": "9AP",
"12": "6DT",
"13": "12CS",
"14": "10BP",
"15": "8ET",
"16": "8AP",
"17": "11BS",
"18": "10BS",
"19": "7AP",
"20": "5DT",
"Result": "115-117"
},
{
"1": "18DS",
"2": "17DP",
"3": "14CS",
"4": "12BS",
"5": "16DP",
"6": "14CS",
"7": "9CP",
"8": "9BS",
"9": "14CS",
"10": "12BS",
"11": "9BS",
"12": "7ET",
"13": "13CP",
"14": "11BS",
"15": "9AP",
"16": "9AP",
"17": "12BS",
"18": "10BP",
"19": "8BS",
"20": "5ET",
"Result": "118-120"
},
{
"1": "19EP",
"2": "18DS",
"3": "15CP",
"4": "13CP",
"5": "17DS",
"6": "15CP",
"7": "10CS",
"8": "10CP",
"9": "14DP",
"10": "12BP",
"11": "10BP",
"12": "7AP",
"13": "13CS",
"14": "12BP",
"15": "9BP",
"16": "9AP",
"17": "13CP",
"18": "11BS",
"19": "8BP",
"20": "6AP",
"Result": "121-123"
},
{
"1": "19ES",
"2": "18EP",
"3": "16DS",
"4": "14CS",
"5": "17DP",
"6": "15DS",
"7": "10CP",
"8": "10CS",
"9": "15DS",
"10": "13CS",
"11": "10BS",
"12": "8BP",
"13": "14DP",
"14": "12CS",
"15": "10BP",
"16": "10AP",
"17": "13CS",
"18": "11BP",
"19": "9BS",
"20": "6AP",
"Result": "124-126"
},
{
"1": "20EP",
"2": "19ES",
"3": "16DP",
"4": "14CP",
"5": "18DS",
"6": "16DP",
"7": "11CS",
"8": "11CP",
"9": "15DP",
"10": "13CP",
"11": "11BP",
"12": "8BP",
"13": "14DS",
"14": "13CP",
"15": "10BP",
"16": "10BP",
"17": "14CP",
"18": "12CS",
"19": "9BP",
"20": "7BP",
"Result": "127-129"
},
{
"1": "21ES",
"2": "20EP",
"3": "17DS",
"4": "15DS",
"5": "19EP",
"6": "17DS",
"7": "11DP",
"8": "11CS",
"9": "16DS",
"10": "14CS",
"11": "11CS",
"12": "9BS",
"13": "15DP",
"14": "13CS",
"15": "11BS",
"16": "11BP",
"17": "14DS",
"18": "12CP",
"19": "10CS",
"20": "7BS",
"Result": "130-132"
},
{
"1": "21EP",
"2": "20ES",
"3": "17DP",
"4": "15DP",
"5": "19ES",
"6": "17DP",
"7": "12DS",
"8": "12DP",
"9": "17DP",
"10": "15DP",
"11": "12CP",
"12": "9BP",
"13": "16DK",
"14": "14CP",
"15": "11CP",
"16": "11BP",
"17": "15DP",
"18": "13CS",
"19": "10CP",
"20": "7BP",
"Result": "133-135"
},
{
"1": "22ES",
"2": "21EP",
"3": "18ES",
"4": "16DS",
"5": "20EP",
"6": "18ES",
"7": "12DP",
"8": "12DS",
"9": "17ES",
"10": "15DS",
"11": "12CS",
"12": "10CS",
"13": "16ES",
"14": "14CS",
"15": "12CS",
"16": "12BS",
"17": "15DS",
"18": "13CP",
"19": "11CS",
"20": "8BS",
"Result": "136-138"
},
{
"1": "23EP",
"2": "22ES",
"3": "19EP",
"4": "17EP",
"5": "21ES",
"6": "19EP",
"7": "13ES",
"8": "13DP",
"9": "18EP",
"10": "16DP",
"11": "13CP",
"12": "10CP",
"13": "17EP",
"14": "15DP",
"15": "12CP",
"16": "12CP",
"17": "16EP",
"18": "14CS",
"19": "11CP",
"20": "8CP",
"Result": "139-141"
},
{
"1": "23EK",
"2": "22EP",
"3": "19EK",
"4": "17EK",
"5": "21EP",
"6": "19EK",
"7": "13EP",
"8": "13EK",
"9": "18EK",
"10": "16EK",
"11": "13DK",
"12": "11CK",
"13": "17EK",
"14": "15DK",
"15": "13CK",
"16": "13CK",
"17": "16EK",
"18": "14DP",
"19": "12DK",
"20": "9CK",
"Result": "142-144"
},
{
"1": "24ES",
"2": "23ES",
"3": "20ES",
"4": "18ES",
"5": "22ES",
"6": "20ES",
"7": "14ES",
"8": "14ES",
"9": "19ES",
"10": "17ES",
"11": "14DS",
"12": "11DS",
"13": "18ES",
"14": "16ES",
"15": "13DS",
"16": "13CS",
"17": "17ES",
"18": "15DS",
"19": "12DS",
"20": "9DS",
"Result": "145-147"
},
{
"1": "24FP\n",
"2": "24FP",
"3": "21EP",
"4": "19EP",
"5": "23FP",
"6": "21EP",
"7": "15EP",
"8": "15EP",
"9": "20FP",
"10": "18EP",
"11": "15EP",
"12": "12EP",
"13": "19FP",
"14": "17EP",
"15": "14DP",
"16": "14DP",
"17": "18FP",
"18": "15EP",
"19": "13EP",
"20": "10EP",
"Result": "148-150"
}
]

2279
module/tables_data/club.json Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,968 @@
[
{
"1": "F",
"2": "F",
"3": "F",
"4": "F",
"5": "F",
"6": "F",
"7": "F",
"8": "F",
"9": "F",
"10": "F",
"11": "F",
"12": "F",
"13": "F",
"14": "F",
"15": "F",
"16": "F",
"17": "F",
"18": "F",
"19": "F",
"20": "F",
"Result": "01-02"
},
{
"1": "",
"2": "",
"3": "",
"4": "",
"5": "",
"6": "",
"7": "",
"8": "",
"9": "",
"10": "",
"11": "",
"12": "",
"13": "",
"14": "",
"15": "",
"16": "",
"17": "",
"18": "",
"19": "",
"20": "",
"Result": "03-30"
},
{
"1": 1,
"2": 1,
"3": "",
"4": "",
"5": "",
"6": "",
"7": "",
"8": "",
"9": "",
"10": "",
"11": "",
"12": "",
"13": "",
"14": "",
"15": "",
"16": "",
"17": "",
"18": "",
"19": "",
"20": "",
"Result": "31-33"
},
{
"1": "2AK",
"2": 2,
"3": "",
"4": "",
"5": "",
"6": "",
"7": "",
"8": "",
"9": "",
"10": "",
"11": "",
"12": "",
"13": "",
"14": "",
"15": "",
"16": "",
"17": "",
"18": "",
"19": "",
"20": "",
"Result": "34-36"
},
{
"1": "3AK",
"2": "3AK",
"3": 1,
"4": "",
"5": "2AK",
"6": 1,
"7": "",
"8": "",
"9": "",
"10": "",
"11": "",
"12": "",
"13": 1,
"14": "",
"15": "",
"16": "",
"17": "",
"18": "",
"19": "",
"20": "",
"Result": "37-39"
},
{
"1": "4AK",
"2": "4AK",
"3": 2,
"4": 1,
"5": "3AK",
"6": "2AK",
"7": 1,
"8": "",
"9": 1,
"10": "",
"11": "",
"12": "",
"13": 2,
"14": 1,
"15": "",
"16": "",
"17": "",
"18": "",
"19": "",
"20": "",
"Result": "40-42"
},
{
"1": "6AK",
"2": "5AK",
"3": "3AK",
"4": 2,
"5": "4AK",
"6": "3AK",
"7": "2AK",
"8": 1,
"9": 2,
"10": 1,
"11": "",
"12": "",
"13": 3,
"14": 2,
"15": 1,
"16": "",
"17": 1,
"18": "",
"19": "",
"20": "",
"Result": "43-45"
},
{
"1": "7AK",
"2": "7AK",
"3": "4AK",
"4": 3,
"5": "5AK",
"6": "4AK",
"7": "3AK",
"8": "1AK",
"9": 3,
"10": 1,
"11": "",
"12": "",
"13": 4,
"14": 3,
"15": 1,
"16": 1,
"17": 1,
"18": 1,
"19": "",
"20": "",
"Result": "46-48"
},
{
"1": "8AK",
"2": "8AK",
"3": "5AK",
"4": "4AK",
"5": "7AK",
"6": "5AK",
"7": "4AK",
"8": "2AK",
"9": 4,
"10": 2,
"11": "",
"12": "",
"13": "5AK",
"14": 4,
"15": 2,
"16": 1,
"17": 2,
"18": 1,
"19": "",
"20": "",
"Result": "49-51"
},
{
"1": "9AK",
"2": "9AK",
"3": "6AK",
"4": "5AK",
"5": "8AK",
"6": "6AK",
"7": "5AK",
"8": "3AK",
"9": "5AK",
"10": 3,
"11": 1,
"12": "",
"13": "6AK",
"14": 5,
"15": 3,
"16": 2,
"17": 3,
"18": 2,
"19": "",
"20": "",
"Result": "52-54"
},
{
"1": "11AK",
"2": "10AK",
"3": "8AK",
"4": "6AK",
"5": "9AK",
"6": "7AK",
"7": "6AK",
"8": "4AK",
"9": "6AK",
"10": 4,
"11": 1,
"12": "",
"13": "7AK",
"14": "6AK",
"15": 4,
"16": 3,
"17": 4,
"18": 3,
"19": "",
"20": "",
"Result": "55-57"
},
{
"1": "12AK",
"2": "11AK",
"3": "9AK",
"4": "7AK",
"5": "10AK",
"6": "8AK",
"7": "7AK",
"8": "5AK",
"9": "7AK",
"10": "5AK",
"11": 2,
"12": "",
"13": "9AK",
"14": "7AK",
"15": "5AK",
"16": 4,
"17": 5,
"18": 4,
"19": 1,
"20": "",
"Result": "58-60"
},
{
"1": "13AK",
"2": "13AK",
"3": "10AK",
"4": "8AK",
"5": "11AK",
"6": "10AK",
"7": "8AK",
"8": "6AK",
"9": "8AK",
"10": "6AK",
"11": 3,
"12": 1,
"13": "10AK",
"14": "8AK",
"15": "6AK",
"16": "5AK",
"17": "6AK",
"18": 5,
"19": 1,
"20": "",
"Result": "61-63"
},
{
"1": "14AK",
"2": "14AK",
"3": "11AK",
"4": "9AK",
"5": "13AK",
"6": "11AK",
"7": "9AK",
"8": "7AK",
"9": "9AK",
"10": "7AK",
"11": 4,
"12": 1,
"13": "11AK",
"14": "9AK",
"15": "7AK",
"16": "6AK",
"17": "7AK",
"18": 6,
"19": 2,
"20": "",
"Result": "64-66"
},
{
"1": "16AK",
"2": "15AK",
"3": "12AK",
"4": "10AK",
"5": "14AK",
"6": "12AK",
"7": "10AK",
"8": "8AK",
"9": "10AK",
"10": "8AK",
"11": "5AK",
"12": 2,
"13": "12AK",
"14": "10AK",
"15": "8AK",
"16": "7AK",
"17": "8AK",
"18": "6AK",
"19": 3,
"20": "",
"Result": "67-69"
},
{
"1": "17AK",
"2": "16AK",
"3": "14AK",
"4": "11AK",
"5": "15AK",
"6": "13AK",
"7": "11AK",
"8": "8AK",
"9": "11AK",
"10": "9AK",
"11": "6AK",
"12": 3,
"13": "13AK",
"14": "11AK",
"15": "9AK",
"16": "8AK",
"17": "9AK",
"18": "7AK",
"19": 4,
"20": 1,
"Result": "70-72"
},
{
"1": "18AK",
"2": "17AK",
"3": "15AK",
"4": "12AK",
"5": "16AK",
"6": "14AK",
"7": "12AK",
"8": "9AK",
"9": "12AK",
"10": "10AK",
"11": "7AK",
"12": 4,
"13": "14AK",
"14": "12AK",
"15": "10AK",
"16": "8AK",
"17": "10AK",
"18": "8AK",
"19": "5AK",
"20": 1,
"Result": "73-75"
},
{
"1": "19BK",
"2": "19BK",
"3": "16AK",
"4": "14AK",
"5": "17BK",
"6": "15AK",
"7": "13AK",
"8": "10AK",
"9": "13AK",
"10": "11AK",
"11": "8AK",
"12": "5AK",
"13": "16AK",
"14": "13AK",
"15": "11AK",
"16": "9AK",
"17": "11AK",
"18": "9AK",
"19": "5AK",
"20": 2,
"Result": "76-78"
},
{
"1": "21BK",
"2": "20BK",
"3": "17AK",
"4": "15AK",
"5": "19BK",
"6": "16BK",
"7": "14AK",
"8": "11AK",
"9": "14AK",
"10": "12AK",
"11": "9AK",
"12": "6AK",
"13": "17AK",
"14": "14AK",
"15": "12AK",
"16": "10AK",
"17": "12AK",
"18": "10AK",
"19": "6AK",
"20": 3,
"Result": "79-81"
},
{
"1": "22BK",
"2": "21BK",
"3": "18BK",
"4": "16BK",
"5": "20BK",
"6": "18BK",
"7": "15BK",
"8": "12AK",
"9": "15BK",
"10": "13AK",
"11": "10AK",
"12": "7AK",
"13": "18BK",
"14": "15AK",
"15": "13AK",
"16": "11AK",
"17": "13AK",
"18": "11AK",
"19": "7AK",
"20": "3AK",
"Result": "82-84"
},
{
"1": "23CK",
"2": "22BK",
"3": "20BK",
"4": "17BK",
"5": "21BK",
"6": "19BK",
"7": "16BK",
"8": "13AK",
"9": "16BK",
"10": "14AK",
"11": "11AK",
"12": "8AK",
"13": "19BK",
"14": "16AK",
"15": "14AK",
"16": "12AK",
"17": "14AK",
"18": "12AK",
"19": "8AK",
"20": "4AK",
"Result": "85-87"
},
{
"1": "24CK",
"2": "23CK",
"3": "21BK",
"4": "18BK",
"5": "22CK",
"6": "20BK",
"7": "17BK",
"8": "14BK",
"9": "17BK",
"10": "15AK",
"11": "12AK",
"12": "9AK",
"13": "20BK",
"14": "17AK",
"15": "15AK",
"16": "13AK",
"17": "15AK",
"18": "12AK",
"19": "9AK",
"20": "5AK",
"Result": "88-90"
},
{
"1": "26CK",
"2": "25CK",
"3": "22BK",
"4": "19BK",
"5": "24CK",
"6": "21CK",
"7": "18BK",
"8": "15BK",
"9": "18CK",
"10": "16BK",
"11": "13AK",
"12": "9AK",
"13": "21BK",
"14": "18BK",
"15": "16AK",
"16": "14AK",
"17": "16AK",
"18": "13AK",
"19": "9AK",
"20": "6AK",
"Result": "91-93"
},
{
"1": "27CK",
"2": "26CK",
"3": "23CK",
"4": "20BK",
"5": "25CK",
"6": "22CK",
"7": "19BK",
"8": "16BK",
"9": "20CK",
"10": "17BK",
"11": "14AK",
"12": "10AK",
"13": "23CK",
"14": "20BK",
"15": "17BK",
"16": "15AK",
"17": "17BK",
"18": "14AK",
"19": "10AK",
"20": "6AK",
"Result": "94-96"
},
{
"1": "28CK",
"2": "27CK",
"3": "24CK",
"4": "21CK",
"5": "26CK",
"6": "23CK",
"7": "20CK",
"8": "16BK",
"9": "21CK",
"10": "17BK",
"11": "15AK",
"12": "11AK",
"13": "24CK",
"14": "21BK",
"15": "17BK",
"16": "16BK",
"17": "18BK",
"18": "15AK",
"19": "11AK",
"20": "7AK",
"Result": "97-99"
},
{
"1": "29CK",
"2": "28CK",
"3": "25CK",
"4": "22CK",
"5": "27CK",
"6": "24CK",
"7": "21CK",
"8": "17BK",
"9": "22CK",
"10": "18BK",
"11": "16AK",
"12": "12AK",
"13": "25CK",
"14": "22BK",
"15": "18BK",
"16": "16BK",
"17": "19BK",
"18": "16BK",
"19": "12AK",
"20": "8AK",
"Result": "100-102"
},
{
"1": "31CK",
"2": "29CK",
"3": "27CK",
"4": "23CK",
"5": "28CK",
"6": "25CK",
"7": "22CK",
"8": "18CK",
"9": "23CK",
"10": "19CK",
"11": "16BK",
"12": "13AK",
"13": "26CK",
"14": "23BK",
"15": "19BK",
"16": "17BK",
"17": "20BK",
"18": "17BK",
"19": "13AK",
"20": "9AK",
"Result": "103-105"
},
{
"1": "32DK",
"2": "31DK",
"3": "28DK",
"4": "24CK",
"5": "30DK",
"6": "27DK",
"7": "23CK",
"8": "18CK",
"9": "24DK",
"10": "20CK",
"11": "17BK",
"12": "14AK",
"13": "27CK",
"14": "24CK",
"15": "20BK",
"16": "18BK",
"17": "21CK",
"18": "18BK",
"19": "13BK",
"20": "9AK",
"Result": "106-108"
},
{
"1": "33DK",
"2": "32DK",
"3": "29DK",
"4": "25CK",
"5": "31DK",
"6": "28DK",
"7": "24CK",
"8": "20CK",
"9": "25DK",
"10": "21CK",
"11": "18BK",
"12": "15AK",
"13": "28DK",
"14": "25CK",
"15": "21BK",
"16": "19BK",
"17": "22CK",
"18": "18BK",
"19": "14BK",
"20": "10AK",
"Result": "109-111"
},
{
"1": "34DK",
"2": "33DK",
"3": "30DK",
"4": "27DK",
"5": "32DK",
"6": "29DK",
"7": "25CK",
"8": "21CK",
"9": "26DK",
"10": "22CK",
"11": "19BK",
"12": "16BK",
"13": "30DK",
"14": "26CK",
"15": "22CK",
"16": "20BK",
"17": "23CK",
"18": "19BK",
"19": "15BK",
"20": "11AK",
"Result": "112-114"
},
{
"1": "36DK",
"2": "34DK",
"3": "31DK",
"4": "28DK",
"5": "33DK",
"6": "30DK",
"7": "26CK",
"8": "22CK",
"9": "27DK",
"10": "23DK",
"11": "20BK",
"12": "17BK",
"13": "31DK",
"14": "27CK",
"15": "23CK",
"16": "21CK",
"17": "24CK",
"18": "20CK",
"19": "16BK",
"20": "11BK",
"Result": "115-117"
},
{
"1": "37DK",
"2": "35DK",
"3": "33DK",
"4": "29DK",
"5": "34DK",
"6": "31DK",
"7": "27DK",
"8": "23DK",
"9": "28DK",
"10": "24DK",
"11": "21BK",
"12": "18BK",
"13": "32DK",
"14": "28CK",
"15": "24CK",
"16": "22CK",
"17": "25DK",
"18": "21CK",
"19": "17BK",
"20": "12BK",
"Result": "118-120"
},
{
"1": "38EK",
"2": "37DK",
"3": "34DK",
"4": "30DK",
"5": "36DK",
"6": "32DK",
"7": "28DK",
"8": "24DK",
"9": "29DK",
"10": "25DK",
"11": "22CK",
"12": "18BK",
"13": "33DK",
"14": "29CK",
"15": "25CK",
"16": "23CK",
"17": "26DK",
"18": "22CK",
"19": "17CK",
"20": "13BK",
"Result": "121-123"
},
{
"1": "39EK",
"2": "38EK",
"3": "35DK",
"4": "31DK",
"5": "37EK",
"6": "33DK",
"7": "29DK",
"8": "24DK",
"9": "30DK",
"10": "26DK",
"11": "23CK",
"12": "19BK",
"13": "34DK",
"14": "30CK",
"15": "26CK",
"16": "23CK",
"17": "27DK",
"18": "23CK",
"19": "18CK",
"20": "14BK",
"Result": "124-126"
},
{
"1": "41EK",
"2": "39EK",
"3": "36EK",
"4": "32DK",
"5": "38EK",
"6": "35EK",
"7": "30DK",
"8": "25DK",
"9": "31EK",
"10": "27DK",
"11": "24CK",
"12": "20CK",
"13": "35DK",
"14": "31CK",
"15": "27CK",
"16": "24CK",
"17": "28DK",
"18": "24CK",
"19": "19CK",
"20": "14BK",
"Result": "127-129"
},
{
"1": "42EK",
"2": "40EK",
"3": "37EK",
"4": "33EK",
"5": "39EK",
"6": "36EK",
"7": "31DK",
"8": "26DK",
"9": "32EK",
"10": "28DK",
"11": "25CK",
"12": "21CK",
"13": "37EK",
"14": "32DK",
"15": "28DK",
"16": "25CK",
"17": "29DK",
"18": "24CK",
"19": "20CK",
"20": "15CK",
"Result": "130-132"
},
{
"1": "43EK",
"2": "41EK",
"3": "39EK",
"4": "34EK",
"5": "40EK",
"6": "37EK",
"7": "32EK",
"8": "27EK",
"9": "33EK",
"10": "29EK",
"11": "26CK",
"12": "22CK",
"13": "38EK",
"14": "33DK",
"15": "29DK",
"16": "26DK",
"17": "30EK",
"18": "25DK",
"19": "21CK",
"20": "16CK",
"Result": "133-135"
},
{
"1": "44EK",
"2": "43EK",
"3": "40EK",
"4": "35EK",
"5": "42EK",
"6": "38EK",
"7": "33EK",
"8": "28EK",
"9": "34EK",
"10": "30EK",
"11": "27DK",
"12": "23CK",
"13": "39EK",
"14": "34DK",
"15": "30DK",
"16": "27DK",
"17": "31EK",
"18": "26DK",
"19": "21DK",
"20": "17CK",
"Result": "136-138"
},
{
"1": "46EK",
"2": "44EK",
"3": "41EK",
"4": "36EK",
"5": "43EK",
"6": "39EK",
"7": "34EK",
"8": "29EK",
"9": "35EK",
"10": "31EK",
"11": "28DK",
"12": "24DK",
"13": "40EK",
"14": "35DK",
"15": "31DK",
"16": "28DK",
"17": "32EK",
"18": "27DK",
"19": "22DK",
"20": "17DK",
"Result": "139-141"
},
{
"1": "47EK",
"2": "45EK",
"3": "42EK",
"4": "37EK",
"5": "44EK",
"6": "40EK",
"7": "35EK",
"8": "30EK",
"9": "36EK",
"10": "32EK",
"11": "29DK",
"12": "25DK",
"13": "41EK",
"14": "36EK",
"15": "32EK",
"16": "29EK",
"17": "33EK",
"18": "28EK",
"19": "23DK",
"20": "18DK",
"Result": "142-144"
},
{
"1": "48EK",
"2": "46EK",
"3": "43EK",
"4": "38EK",
"5": "45EK",
"6": "41EK",
"7": "36EK",
"8": "31EK",
"9": "37FK",
"10": "33EK",
"11": "30EK",
"12": "26EK",
"13": "42EK",
"14": "37EK",
"15": "33EK",
"16": "30EK",
"17": "34EK",
"18": "29EK",
"19": "24EK",
"20": "19EK",
"Result": "145-147"
},
{
"1": "50FK\n",
"2": "48FK",
"3": "45FK",
"4": "40FK",
"5": "47FK",
"6": "43FK",
"7": "38FK",
"8": "32FK",
"9": "39FK",
"10": "34FK",
"11": "31FK",
"12": "27FK",
"13": "44FK",
"14": "39FK",
"15": "34FK",
"16": "31FK",
"17": "35FK",
"18": "30FK",
"19": "25FK",
"20": "20FK",
"Result": "148-150"
}
]

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,155 @@
[
{
"": "",
"A": "Foe escapes like the wind.",
"B": "Your attack falls short.",
"D": "A little elbow before you lose your grip. +2H",
"E": "You grip strand of foe's hair. It breaks. +3H",
"Result": "01 05",
"c": "Your fingernails deal a vicious wound. +1 H"
},
{
"": "",
"A": "",
"B": "",
"D": "",
"E": "",
"Result": "",
"c": ""
},
{
"": "",
"A": "Grab foe's arm. Oops. Try again. +0 H",
"B": "Your grip fails.",
"D": "This was not a special moment. +4H",
"E": "You have initiative next round. +5H",
"Result": 45571,
"c": "Foe grabs, misses. You have initiative. +3H"
},
{
"": "",
"A": "You impede foe's combat stance. You have the initiative.",
"B": "Foe collides with your attack before you get a grip. Small bruise.",
"D": "Grab foe's head. If foe has helm, you twist it. Otherwise, you gain initiative.",
"E": "Lame attack, but foe is concerned. He moves back.",
"Result": 42309,
"c": "You cannot get a good grip, foe hurts himself evading. You have initiative."
},
{
"": "",
"A": "+0 H",
"B": "+2H",
"D": "with helm:",
"E": "+6H _ x",
"Result": "",
"c": "+4H"
},
{
"": "",
"A": "Foe breaks free of a weak grip. You have the initiative next round.",
"B": "Grab foe and give him a weak punch. He thinks you are dangerous.",
"D": "Push foe, unbalancing him. You have initiative for 2 rounds.",
"E": "Strong passing blow near foe's head. His violent evasion is not productive.",
"Result": "16-20",
"c": "Foe recovers, continues his defense by sweeping his weapon at your feet."
},
{
"": "",
"A": "+0 H",
"B": "",
"D": "",
"E": "+3H",
"Result": "",
"c": ""
},
{
"": "",
"A": "Almost get a grip on foe's arm. He avoids his mistake. You gain the initiative next round.",
"B": "You grip foes shield arm. Foe's strike toward your head makes you let go of him. He keeps a distance.",
"D": "Hard, but poorly placed. Foe bounces back out of your grip. He looks like he does not recognize you.",
"E": "Uncoordinated attack and a little luck, allows foe to escape your grasp. You have initiative for 2 rounds.",
"Result": "21-35",
"c": "Collide with foe. You push him away and he stumbles back 5 feet. It went better than you could have hoped."
},
{
"": "",
"A": "+3 H",
"B": "X(-20)",
"D": "OH",
"E": "",
"Result": "",
"c": "+2 H"
},
{
"": "",
"A": "Grip to lower back. Foe wards off your attack and prepares for your next move.",
"B": "Grip fails, but bash does not. You unbalance your foe. You have the initiative.",
"D": "Strike to foe's shield arm. If foe has no shield, you immobilize arm for 6 rounds.",
"E": "Attack to upper leg. Foe spins to break free. He is disoriented badly. It takes a moment for him to see you.",
"Result": "36-45",
"c": "Your attack is almost comical as you seek any little grip you can get. All the tiny tugs finally have an effect on foe."
},
{
"": "",
"A": "",
"B": "+4H",
"D": "with shield: +3H",
"E": "St*",
"Result": "",
"c": ""
},
{
"": "",
"A": "Hinder foe's weapon arm. Foe violently frees himself and takes a defensive stance",
"B": "Pull foe over, he breaks free. He is",
"D": "Painful grip on foe's hand. You do not break anything, but he thinks so. You have initiative for 4 rounds",
"E": "You and foe collide. He breaks your grip and stumbles away. You bounce back and",
"Result": "46-50",
"c": "Grab foe's waist. Your grip appeared to be strong, but now it is losing its advantage. Your foe is working free"
},
{
"": "",
"A": "",
"B": "having trouble recovering. Your heart is",
"D": "",
"E": "",
"Result": "",
"c": ""
},
{
"": "",
"A": "defensive stance.",
"B": "broken.",
"D": "have initiative for 4 rounds.",
"E": "miss a good opportunity.",
"Result": "",
"c": "advantage. Your foe is working free."
},
{
"": "",
"A": "",
"B": "5H",
"D": "3(-30)",
"E": "2<28",
"Result": "",
"c": "3(-25)"
},
{
"": "",
"A": "You get in close and grab at foe's hair. He is daunted and steps back to escape your reach.",
"B": "Grip to foe's garments. They rip and you lose a hopeful hold. Foe is carried back by his break-away.",
"D": "Catch foe's waist garments and pull him in. He is in trouble. He seeks to strike your hand and break your hold.",
"E": "Grip to shield arm. Foe drops his shield as he wails in pain. You try to stay serous.",
"Result": "51-55",
"c": "Grapple foe's leg and try to lift it up off the ground. Foe slips away, but is off balance while recovering."
},
{
"": "",
"A": "%(-20)",
"B": "+7H",
"D": "3(-50)",
"E": "+5H -200\n",
"Result": "",
"c": -4.2
}
]

View File

@ -0,0 +1,968 @@
[
{
"1": "F",
"2": "F",
"3": "F",
"4": "F",
"5": "F",
"6": "F",
"7": "F",
"8": "F",
"9": "F",
"10": "F",
"11": "F",
"12": "F",
"13": "F",
"14": "F",
"15": "F",
"16": "F",
"17": "F",
"18": "F",
"19": "F",
"20": "F",
"Result": "01-02"
},
{
"1": "",
"2": "",
"3": "",
"4": "",
"5": "",
"6": "",
"7": "",
"8": "",
"9": "",
"10": "",
"11": "",
"12": "",
"13": "",
"14": "",
"15": "",
"16": "",
"17": "",
"18": "",
"19": "",
"20": "",
"Result": "03-30"
},
{
"1": "",
"2": "",
"3": "",
"4": "",
"5": "",
"6": "",
"7": "",
"8": "",
"9": "",
"10": "",
"11": "",
"12": "",
"13": "",
"14": "",
"15": "",
"16": "",
"17": "",
"18": "",
"19": "",
"20": "",
"Result": "31-33"
},
{
"1": "",
"2": "",
"3": "",
"4": "",
"5": "",
"6": "",
"7": "",
"8": "",
"9": "",
"10": "",
"11": "",
"12": "",
"13": "",
"14": "",
"15": "",
"16": "",
"17": "",
"18": "",
"19": "",
"20": "",
"Result": "34-36"
},
{
"1": "",
"2": "",
"3": "",
"4": "",
"5": "",
"6": "",
"7": "",
"8": "",
"9": "",
"10": "",
"11": "",
"12": "",
"13": "",
"14": "",
"15": "",
"16": "",
"17": "",
"18": "",
"19": "",
"20": "",
"Result": "37-39"
},
{
"1": "",
"2": "",
"3": "",
"4": "",
"5": "",
"6": "",
"7": "",
"8": "",
"9": "",
"10": "",
"11": "",
"12": "",
"13": "",
"14": "",
"15": "",
"16": "",
"17": "",
"18": "",
"19": "",
"20": "",
"Result": "40-42"
},
{
"1": "",
"2": "",
"3": "",
"4": "",
"5": "",
"6": "",
"7": "",
"8": "",
"9": "",
"10": "",
"11": "",
"12": "",
"13": "",
"14": "",
"15": "",
"16": "",
"17": "",
"18": "",
"19": "",
"20": "",
"Result": "43-45"
},
{
"1": "",
"2": "",
"3": "",
"4": "",
"5": "",
"6": "",
"7": "",
"8": "",
"9": "",
"10": "",
"11": "",
"12": "",
"13": "",
"14": "",
"15": "",
"16": "",
"17": "",
"18": "",
"19": "",
"20": "",
"Result": "46-48"
},
{
"1": "",
"2": "",
"3": "",
"4": "",
"5": "",
"6": "",
"7": "",
"8": "",
"9": "",
"10": "",
"11": "",
"12": "",
"13": "",
"14": "",
"15": "",
"16": "",
"17": "",
"18": "",
"19": "",
"20": "",
"Result": "49-51"
},
{
"1": "",
"2": "",
"3": "",
"4": "",
"5": "",
"6": "",
"7": "",
"8": "",
"9": "",
"10": "",
"11": "",
"12": "",
"13": "",
"14": "",
"15": "",
"16": "",
"17": "",
"18": "",
"19": "",
"20": "",
"Result": "52-54"
},
{
"1": "",
"2": "",
"3": "",
"4": "",
"5": "",
"6": "",
"7": "",
"8": "",
"9": "",
"10": "",
"11": "",
"12": "",
"13": "",
"14": "",
"15": "",
"16": "",
"17": "",
"18": "",
"19": "",
"20": "",
"Result": "55-57"
},
{
"1": "",
"2": "",
"3": "",
"4": "",
"5": "",
"6": "",
"7": "",
"8": "",
"9": "",
"10": "",
"11": "",
"12": "",
"13": "",
"14": "",
"15": "",
"16": "",
"17": "",
"18": "",
"19": "",
"20": "",
"Result": "58-60"
},
{
"1": "",
"2": "",
"3": "",
"4": "",
"5": "",
"6": "",
"7": "",
"8": "",
"9": "",
"10": "",
"11": "",
"12": "",
"13": "",
"14": "",
"15": "",
"16": 1,
"17": "",
"18": "",
"19": "",
"20": "1AG",
"Result": "61-63"
},
{
"1": "",
"2": "",
"3": "",
"4": "",
"5": "",
"6": "",
"7": "",
"8": 1,
"9": "",
"10": "",
"11": "",
"12": 1,
"13": "",
"14": "",
"15": 1,
"16": "1AG",
"17": "",
"18": "",
"19": 1,
"20": "1AG",
"Result": "64-66"
},
{
"1": "",
"2": "",
"3": "",
"4": "",
"5": "",
"6": "",
"7": 1,
"8": 1,
"9": "",
"10": "",
"11": 1,
"12": "1AG",
"13": "",
"14": "",
"15": "1AG",
"16": "1AG",
"17": 1,
"18": 1,
"19": "1AG",
"20": "1AG",
"Result": "67-69"
},
{
"1": "",
"2": "",
"3": "",
"4": "",
"5": "",
"6": "",
"7": 1,
"8": "1AG",
"9": "",
"10": "",
"11": 1,
"12": "1AG",
"13": 1,
"14": 1,
"15": "1AG",
"16": "1AG",
"17": 1,
"18": 1,
"19": "1AG",
"20": "1AG",
"Result": "70-72"
},
{
"1": "",
"2": "",
"3": "",
"4": "",
"5": "",
"6": 1,
"7": "1AG",
"8": "2AG",
"9": 1,
"10": 1,
"11": "1AG",
"12": "1AG",
"13": 1,
"14": 1,
"15": "1AG",
"16": "2AG",
"17": 1,
"18": "1AG",
"19": "1AG",
"20": "1AG",
"Result": "73-75"
},
{
"1": "",
"2": 1,
"3": "",
"4": "",
"5": "",
"6": 1,
"7": "2AG",
"8": "2AG",
"9": 1,
"10": 1,
"11": "1AG",
"12": "1AG",
"13": 1,
"14": "1AG",
"15": "2AG",
"16": "2AG",
"17": "2AG",
"18": "2AG",
"19": "1AG",
"20": "1AG",
"Result": "76-78"
},
{
"1": "",
"2": 1,
"3": "",
"4": "",
"5": 1,
"6": 1,
"7": "2AG",
"8": "2AG",
"9": 2,
"10": "1AG",
"11": "2AG",
"12": "1AG",
"13": "2AG",
"14": "2AG",
"15": "2AG",
"16": "2AG",
"17": "2AG",
"18": "2AG",
"19": "2AG",
"20": "1AG",
"Result": "79-81"
},
{
"1": 1,
"2": "2AG",
"3": "",
"4": "",
"5": 1,
"6": 2,
"7": "3AG",
"8": "3AG",
"9": "2AG",
"10": "2AG",
"11": "2AG",
"12": "2AG",
"13": "2AG",
"14": "2AG",
"15": "2AG",
"16": "2AG",
"17": "3AG",
"18": "2AG",
"19": "2AG",
"20": "1AG",
"Result": "82-84"
},
{
"1": 1,
"2": "2AG",
"3": "",
"4": "",
"5": 2,
"6": "2AG",
"7": "3AG",
"8": "3AG",
"9": "3AG",
"10": "2AG",
"11": "2AG",
"12": "2AG",
"13": "3AG",
"14": "2AG",
"15": "3AG",
"16": "3AG",
"17": "3AG",
"18": "3AG",
"19": "2AG",
"20": "1AG",
"Result": "85-87"
},
{
"1": 2,
"2": "3AG",
"3": 1,
"4": "1AG",
"5": 2,
"6": "3AG",
"7": "3AG",
"8": "3AG",
"9": "3AG",
"10": "3AG",
"11": "2AG",
"12": "2AG",
"13": "3AG",
"14": "3AG",
"15": "3AG",
"16": "3AG",
"17": "3AG",
"18": "3AG",
"19": "2AG",
"20": "1AG",
"Result": "88-90"
},
{
"1": 2,
"2": "3AG",
"3": 1,
"4": "1AG",
"5": 3,
"6": "3AG",
"7": "4AG",
"8": "4AG",
"9": "4AG",
"10": "3AG",
"11": "3AG",
"12": "2AG",
"13": "4AG",
"14": "3AG",
"15": "3AG",
"16": "3AG",
"17": "4AG",
"18": "3AG",
"19": "2AG",
"20": "2BG",
"Result": "91-93"
},
{
"1": 3,
"2": "4AG",
"3": "2AG",
"4": "1AG",
"5": 4,
"6": "4AG",
"7": "4AG",
"8": "4AG",
"9": "4AG",
"10": "4AG",
"11": "3AG",
"12": "2AG",
"13": "4AG",
"14": "4AG",
"15": "4AG",
"16": "4AG",
"17": "4AG",
"18": "4AG",
"19": "3AG",
"20": "2BG",
"Result": "94-96"
},
{
"1": 4,
"2": "5AG",
"3": "2AG",
"4": "2AG",
"5": "4AG",
"6": "4AG",
"7": "5AG",
"8": "4AG",
"9": "5AG",
"10": "4AG",
"11": "3AG",
"12": "2AG",
"13": "5AG",
"14": "4AG",
"15": "4AG",
"16": "4AG",
"17": "5AG",
"18": "4AG",
"19": "3AG",
"20": "2BG",
"Result": "97-99"
},
{
"1": 4,
"2": "4AG",
"3": "3AG",
"4": "2AG",
"5": "5AG",
"6": "5AG",
"7": "5AG",
"8": "5AG",
"9": "5AG",
"10": "4AG",
"11": "3AG",
"12": "3AG",
"13": "5AG",
"14": "4AG",
"15": "4AG",
"16": "4AG",
"17": "5AG",
"18": "4AG",
"19": "3AG",
"20": "2BG",
"Result": "100-102"
},
{
"1": "5AG",
"2": "6AG",
"3": "4AG",
"4": "3AG",
"5": "5AG",
"6": "5AG",
"7": "5BG",
"8": "5BG",
"9": "6AG",
"10": "5BG",
"11": "4BG",
"12": "3BG",
"13": "6BG",
"14": "5BG",
"15": "5BG",
"16": "4BG",
"17": "5BG",
"18": "5BG",
"19": "3BG",
"20": "2BG",
"Result": "103-105"
},
{
"1": "6AG",
"2": "6AG",
"3": "4AG",
"4": "3AG",
"5": "6AG",
"6": "6AG",
"7": "6BG",
"8": "6BG",
"9": "6AG",
"10": "5BG",
"11": "4BG",
"12": "3BG",
"13": "6BG",
"14": "5BG",
"15": "5BG",
"16": "5BG",
"17": "6BG",
"18": "5BG",
"19": "4BG",
"20": "2CG",
"Result": "106-108"
},
{
"1": "6AG",
"2": "7AG",
"3": "5AG",
"4": "4AG",
"5": "7AG",
"6": "6AG",
"7": "6BG",
"8": "6BG",
"9": "7AG",
"10": "6BG",
"11": "4BG",
"12": "3BG",
"13": "7BG",
"14": "6BG",
"15": "5BG",
"16": "5BG",
"17": "6BG",
"18": "5BG",
"19": "4BG",
"20": "2CG",
"Result": "109-111"
},
{
"1": "7AG",
"2": "8AG",
"3": "5AG",
"4": "4AG",
"5": "7AG",
"6": "7AG",
"7": "7BG",
"8": "6BG",
"9": "7AG",
"10": "6BG",
"11": "4BG",
"12": "3BG",
"13": "7BG",
"14": "6BG",
"15": "6BG",
"16": "5BG",
"17": "7BG",
"18": "6BG",
"19": "4BG",
"20": "2CG",
"Result": "112-114"
},
{
"1": "8AG",
"2": "8BG",
"3": "6AG",
"4": "5BG",
"5": "8BG",
"6": "7BG",
"7": "7CG",
"8": "7CG",
"9": "8BG",
"10": "7CG",
"11": "5CG",
"12": "4CG",
"13": "7CG",
"14": "6CG",
"15": "6CG",
"16": "5CG",
"17": "7CG",
"18": "6CG",
"19": "4CG",
"20": "2CG",
"Result": "115-117"
},
{
"1": "8AG",
"2": "9BG",
"3": "7BG",
"4": "5BG",
"5": "8BG",
"6": "8BG",
"7": "7CG",
"8": "7CG",
"9": "8BG",
"10": "7CG",
"11": "5CG",
"12": "4CG",
"13": "8CG",
"14": "7CG",
"15": "6CG",
"16": "6CG",
"17": "7CG",
"18": "6CG",
"19": "4CG",
"20": "2CG",
"Result": "118-120"
},
{
"1": "9AG",
"2": "9BG",
"3": "7BG",
"4": "6BG",
"5": "9BG",
"6": "8BG",
"7": "8CG",
"8": "7CG",
"9": "9BG",
"10": "8CG",
"11": "5CG",
"12": "4CG",
"13": "8CG",
"14": "7CG",
"15": "7CG",
"16": "6CG",
"17": "8CG",
"18": "7CG",
"19": "5CG",
"20": "3DG",
"Result": "121-123"
},
{
"1": "9AG",
"2": "10CG",
"3": "8CG",
"4": "6CG",
"5": "10CG",
"6": "9CG",
"7": "8CG",
"8": "8CG",
"9": "9CG",
"10": "8CG",
"11": "5CG",
"12": "4CG",
"13": "9CG",
"14": "7CG",
"15": "7CG",
"16": "6CG",
"17": "8CG",
"18": "7CG",
"19": "5CG",
"20": "3DG",
"Result": "124-126"
},
{
"1": "10BG",
"2": "10CG",
"3": "8CG",
"4": "7CG",
"5": "10CG",
"6": "9CG",
"7": "9DG",
"8": "8DG",
"9": "10CG",
"10": "8DG",
"11": "6DG",
"12": "4DG",
"13": "9DG",
"14": "8DG",
"15": "7DG",
"16": "7DG",
"17": "9DG",
"18": "7DG",
"19": "5DG",
"20": "3DG",
"Result": "127-129"
},
{
"1": "11BG",
"2": "11CG",
"3": "9CG",
"4": "7CG",
"5": "11CG",
"6": "10CG",
"7": "9DG",
"8": "8DG",
"9": "10CG",
"10": "9DG",
"11": "6DG",
"12": "4DG",
"13": "10DG",
"14": "8DG",
"15": "8DG",
"16": "7DG",
"17": "9DG",
"18": "8DG",
"19": "5DG",
"20": "3DG",
"Result": "130-132"
},
{
"1": "11CG",
"2": "12DG",
"3": "10DG",
"4": "8DG",
"5": "11DG",
"6": "10DG",
"7": "9DG",
"8": "9DG",
"9": "11DG",
"10": "9DG",
"11": "6DG",
"12": "5DG",
"13": "10DG",
"14": "9DG",
"15": "8DG",
"16": "7DG",
"17": "9DG",
"18": "8DG",
"19": "5DG",
"20": "3DG",
"Result": "133-135"
},
{
"1": "12CG",
"2": "12DG",
"3": "10DG",
"4": "8DG",
"5": "11DG",
"6": "11DG",
"7": "10DG",
"8": "9DG",
"9": "11DG",
"10": "10DG",
"11": "6DG",
"12": "5DG",
"13": "11DG",
"14": "9DG",
"15": "8DG",
"16": "7DG",
"17": "10DG",
"18": "8DG",
"19": "6DG",
"20": "3EG",
"Result": "136-138"
},
{
"1": "13DG",
"2": "13DG",
"3": "11DG",
"4": "9DG",
"5": "13DG",
"6": "11DG",
"7": "10EG",
"8": "9EG",
"9": "12DG",
"10": "10EG",
"11": "7EG",
"12": "5EG",
"13": "11EG",
"14": "9EG",
"15": "9EG",
"16": "8EG",
"17": "10EG",
"18": "9EG",
"19": "6EG",
"20": "3EG",
"Result": "139-141"
},
{
"1": "13DG",
"2": "13EG",
"3": "11EG",
"4": "9EG",
"5": "13EG",
"6": "12EG",
"7": "11EG",
"8": "10EG",
"9": "12EG",
"10": "11EG",
"11": "7EG",
"12": "5EG",
"13": "12EG",
"14": "10EG",
"15": "9EG",
"16": "8EG",
"17": "11EG",
"18": "9EG",
"19": "6EG",
"20": "3EG",
"Result": "142-144"
},
{
"1": "14EG",
"2": "14EG",
"3": "12EG",
"4": "10EG",
"5": "14EG",
"6": "12EG",
"7": "11EG",
"8": "10EG",
"9": "13EG",
"10": "11EG",
"11": "7EG",
"12": "5EG",
"13": "12EG",
"14": "10EG",
"15": "9EG",
"16": "8EG",
"17": "11EG",
"18": "9EG",
"19": "6EG",
"20": "3EG",
"Result": "145-147"
},
{
"1": "15FG\n",
"2": "15FG",
"3": "13EG",
"4": "11EG",
"5": "14FG",
"6": "13EG",
"7": "12EG",
"8": "11EG",
"9": "14FG",
"10": "12EG",
"11": "8EG",
"12": "6EG",
"13": "13FG",
"14": "11EG",
"15": "10EG",
"16": "9EG",
"17": "12FG",
"18": "10EG",
"19": "7EG",
"20": "4EG",
"Result": "148-150"
}
]

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,968 @@
[
{
"1": "F",
"2": "F",
"3": "F",
"4": "F",
"5": "F",
"6": "F",
"7": "F",
"8": "F",
"9": "F",
"10": "F",
"11": "F",
"12": "F",
"13": "F",
"14": "F",
"15": "F",
"16": "F",
"17": "F",
"18": "F",
"19": "F",
"20": "F",
"Result": "01-02"
},
{
"1": "",
"2": "",
"3": "",
"4": "",
"5": "",
"6": "",
"7": "",
"8": "",
"9": "",
"10": "",
"11": "",
"12": "",
"13": "",
"14": "",
"15": "",
"16": "",
"17": "",
"18": "",
"19": "",
"20": "",
"Result": "03-30"
},
{
"1": "",
"2": "",
"3": "",
"4": "",
"5": "",
"6": "",
"7": "",
"8": "",
"9": "",
"10": "",
"11": "",
"12": "",
"13": "",
"14": "",
"15": "",
"16": "",
"17": "",
"18": "",
"19": "",
"20": "",
"Result": "31-33"
},
{
"1": "",
"2": "",
"3": "",
"4": "",
"5": "",
"6": "",
"7": "",
"8": "",
"9": "",
"10": "",
"11": "",
"12": "",
"13": "",
"14": "",
"15": "",
"16": "",
"17": "",
"18": "",
"19": "",
"20": "",
"Result": "34-36"
},
{
"1": "",
"2": "",
"3": "",
"4": "",
"5": "",
"6": "",
"7": "",
"8": "",
"9": "",
"10": "",
"11": "",
"12": "",
"13": "",
"14": "",
"15": "",
"16": "",
"17": "",
"18": "",
"19": "",
"20": "",
"Result": "37-39"
},
{
"1": "",
"2": "",
"3": "",
"4": "",
"5": "",
"6": "",
"7": "",
"8": "",
"9": "",
"10": "",
"11": "",
"12": "",
"13": "",
"14": "",
"15": "",
"16": "",
"17": "",
"18": "",
"19": "",
"20": "",
"Result": "40-42"
},
{
"1": "",
"2": "",
"3": "",
"4": "",
"5": "",
"6": "",
"7": "",
"8": "",
"9": "",
"10": "",
"11": "",
"12": "",
"13": "",
"14": "",
"15": "",
"16": "",
"17": "",
"18": "",
"19": "",
"20": "",
"Result": "43-45"
},
{
"1": "",
"2": "",
"3": "",
"4": "",
"5": "",
"6": "",
"7": "",
"8": "",
"9": "",
"10": "",
"11": "",
"12": "",
"13": "",
"14": "",
"15": "",
"16": "",
"17": "",
"18": "",
"19": "",
"20": "",
"Result": "46-48"
},
{
"1": 1,
"2": "",
"3": "",
"4": "",
"5": "",
"6": "",
"7": "",
"8": "",
"9": "",
"10": "",
"11": "",
"12": "",
"13": "",
"14": "",
"15": "",
"16": "",
"17": "",
"18": "",
"19": "",
"20": "",
"Result": "49-51"
},
{
"1": 2,
"2": 1,
"3": "",
"4": "",
"5": "",
"6": "",
"7": "",
"8": "",
"9": "",
"10": "",
"11": "",
"12": "",
"13": "",
"14": "",
"15": "",
"16": "",
"17": "",
"18": "",
"19": "",
"20": "",
"Result": "52-54"
},
{
"1": "3AT",
"2": 2,
"3": "",
"4": "",
"5": 1,
"6": "",
"7": "",
"8": "",
"9": "",
"10": "",
"11": "",
"12": "",
"13": "",
"14": "",
"15": "",
"16": "",
"17": "",
"18": "",
"19": "",
"20": "",
"Result": "55-57"
},
{
"1": "4BT",
"2": 3,
"3": 1,
"4": "",
"5": 2,
"6": "",
"7": "",
"8": "",
"9": "",
"10": "",
"11": "",
"12": "",
"13": "",
"14": "",
"15": "",
"16": "",
"17": 1,
"18": "",
"19": "",
"20": "",
"Result": "58-60"
},
{
"1": "5CT",
"2": "4AT",
"3": 2,
"4": "",
"5": 3,
"6": 1,
"7": "",
"8": "",
"9": 1,
"10": "",
"11": "",
"12": "",
"13": "",
"14": "",
"15": "",
"16": "",
"17": 1,
"18": "",
"19": "",
"20": "",
"Result": "61-63"
},
{
"1": "6DT",
"2": "5BT",
"3": 3,
"4": "",
"5": "4AT",
"6": 2,
"7": "",
"8": "",
"9": 2,
"10": "",
"11": "",
"12": "",
"13": 1,
"14": "",
"15": "",
"16": "",
"17": 2,
"18": "",
"19": "",
"20": "",
"Result": "64-66"
},
{
"1": "7AP",
"2": "6CT",
"3": 4,
"4": 1,
"5": "5BT",
"6": 3,
"7": "",
"8": "",
"9": 3,
"10": 1,
"11": "",
"12": "",
"13": 1,
"14": 1,
"15": "",
"16": "",
"17": 3,
"18": 1,
"19": "",
"20": "",
"Result": "67-69"
},
{
"1": "8AP",
"2": "7DT",
"3": 5,
"4": 2,
"5": "6CT",
"6": "4AT",
"7": "",
"8": 1,
"9": 4,
"10": 1,
"11": "",
"12": "",
"13": 2,
"14": 1,
"15": "",
"16": "",
"17": 4,
"18": 1,
"19": "",
"20": "",
"Result": "70-72"
},
{
"1": "9AP",
"2": "8AP",
"3": "6AT",
"4": 3,
"5": "7DT",
"6": "5BT",
"7": 1,
"8": 1,
"9": "5AT",
"10": 2,
"11": "",
"12": "",
"13": 3,
"14": 2,
"15": 1,
"16": 1,
"17": 5,
"18": 2,
"19": "",
"20": "",
"Result": "73-75"
},
{
"1": "10AP",
"2": "9AP",
"3": "7BT",
"4": 4,
"5": "8AP",
"6": "6CT",
"7": 1,
"8": 2,
"9": "6BT",
"10": 3,
"11": 1,
"12": "",
"13": 4,
"14": 3,
"15": 1,
"16": 1,
"17": 6,
"18": 2,
"19": "",
"20": "",
"Result": "76-78"
},
{
"1": "11AP",
"2": "10AP",
"3": "8CT",
"4": "5AT",
"5": "9AP",
"6": "7DT",
"7": "2AT",
"8": 3,
"9": "7CT",
"10": 4,
"11": 1,
"12": "",
"13": "5AT",
"14": 4,
"15": 2,
"16": 2,
"17": 6,
"18": 4,
"19": 1,
"20": "",
"Result": "79-81"
},
{
"1": "12AP",
"2": "11AP",
"3": "9DT",
"4": "6BT",
"5": "10AP",
"6": "8AP",
"7": "3BT",
"8": "4AT",
"9": "8DT",
"10": "5AT",
"11": 2,
"12": 1,
"13": "6BT",
"14": 5,
"15": 3,
"16": 3,
"17": 7,
"18": 5,
"19": 1,
"20": "",
"Result": "82-84"
},
{
"1": "13AP",
"2": "12AP",
"3": "10AP",
"4": "7CT",
"5": "11AP",
"6": "9AP",
"7": "4CT",
"8": "5BT",
"9": "9AP",
"10": "6BT",
"11": "3AT",
"12": 1,
"13": "7CT",
"14": "6AT",
"15": 4,
"16": 4,
"17": 8,
"18": 5,
"19": 2,
"20": "",
"Result": "85-87"
},
{
"1": "14AP",
"2": "13AP",
"3": "11AP",
"4": "8DT",
"5": "12AP",
"6": "10AP",
"7": "5DT",
"8": "5CT",
"9": "10AP",
"10": "7CT",
"11": "4BT",
"12": 2,
"13": "8DT",
"14": "6BT",
"15": 5,
"16": 5,
"17": "9AT",
"18": "6AT",
"19": 3,
"20": 1,
"Result": "88-90"
},
{
"1": "15BP",
"2": "14AP",
"3": "12AP",
"4": "9AP",
"5": "13AP",
"6": "11AP",
"7": "6AP",
"8": "6DT",
"9": "11AP",
"10": "8DT",
"11": "5CT",
"12": "3AT",
"13": "9AP",
"14": "7CT",
"15": 6,
"16": 6,
"17": "10BT",
"18": "7BT",
"19": "4AT",
"20": 1,
"Result": "91-93"
},
{
"1": "16BP",
"2": "15BP",
"3": "13AP",
"4": "10AP",
"5": "14AP",
"6": "12AP",
"7": "7AP",
"8": "7AP",
"9": "12AP",
"10": "9AP",
"11": "6DT",
"12": "4BT",
"13": "10AP",
"14": "8DT",
"15": "6AT",
"16": "6AT",
"17": "11CT",
"18": "8CT",
"19": "5BT",
"20": 2,
"Result": "94-96"
},
{
"1": "17BP",
"2": "16BP",
"3": "14AP",
"4": "11AP",
"5": "15BP",
"6": "13AP",
"7": "8AP",
"8": "8AP",
"9": "13AP",
"10": "9AP",
"11": "7AP",
"12": "5CT",
"13": "11AP",
"14": "9AP",
"15": "7BT",
"16": "7BT",
"17": "11DT",
"18": "9DT",
"19": "5CT",
"20": 3,
"Result": "97-99"
},
{
"1": "18BP",
"2": "17BP",
"3": "15AP",
"4": "12AP",
"5": "16BP",
"6": "14BP",
"7": "9BP",
"8": "9AP",
"9": "14BP",
"10": "10AP",
"11": "8AP",
"12": "6DT",
"13": "12AP",
"14": "10AP",
"15": "8CT",
"16": "8CT",
"17": "12AP",
"18": "9AP",
"19": "6DT",
"20": "4AT",
"Result": "100-102"
},
{
"1": "19BP",
"2": "18BP",
"3": "16AP",
"4": "13AP",
"5": "17BP",
"6": "15BP",
"7": "10AP",
"8": "9AP",
"9": "15BP",
"10": "11AP",
"11": "9AP",
"12": "7AP",
"13": "13BP",
"14": "11AP",
"15": "9DT",
"16": "9DT",
"17": "13AP",
"18": "10AP",
"19": "7AU",
"20": "5BT",
"Result": "103-105"
},
{
"1": "20CP",
"2": "19BP",
"3": "17BP",
"4": "14AP",
"5": "18CP",
"6": "16BP",
"7": "11BP",
"8": "10AP",
"9": "16BP",
"10": "12AP",
"11": "10AP",
"12": "7AP",
"13": "14AP",
"14": "12AP",
"15": "10AP",
"16": "10AP",
"17": "14AP",
"18": "11AP",
"19": "8AK",
"20": "6CT",
"Result": "106-108"
},
{
"1": "21DP",
"2": "20CP",
"3": "18BP",
"4": "15AP",
"5": "19CP",
"6": "17BP",
"7": "12BP",
"8": "11AP",
"9": "17CP",
"10": "13BP",
"11": "11AP",
"12": "8AP",
"13": "14BP",
"14": "12AP",
"15": "11AP",
"16": "11AP",
"17": "15AP",
"18": "12AP",
"19": "9AP",
"20": "6DT",
"Result": "109-111"
},
{
"1": "22DP",
"2": "21CP",
"3": "19BP",
"4": "16BP",
"5": "20CP",
"6": "18CP",
"7": "13BP",
"8": "12BP",
"9": "18CP",
"10": "14BP",
"11": "12AP",
"12": "9AP",
"13": "15CP",
"14": "13BP",
"15": "11AP",
"16": "11AP",
"17": "16BP",
"18": "13AP",
"19": "10AU",
"20": "7AU",
"Result": "112-114"
},
{
"1": "23DP",
"2": "22DP",
"3": "20CP",
"4": "17BP",
"5": "21CP",
"6": "19CP",
"7": "14BP",
"8": "13BP",
"9": "19CP",
"10": "15BP",
"11": "12BP",
"12": "10AP",
"13": "16CP",
"14": "14BP",
"15": "12AP",
"16": "12AP",
"17": "16BK",
"18": "14AK",
"19": "10AK",
"20": "8AK",
"Result": "115-117"
},
{
"1": "24DK",
"2": "23DP",
"3": "21CP",
"4": "18CP",
"5": "22DP",
"6": "20CP",
"7": "15CP",
"8": "13BP",
"9": "20CP",
"10": "16CP",
"11": "13BP",
"12": "11BP",
"13": "17CP",
"14": "15BP",
"15": "13AP",
"16": "13AP",
"17": "17BP",
"18": "14BP",
"19": "11BP",
"20": "9AP",
"Result": "118-120"
},
{
"1": "25DP",
"2": "24DP",
"3": "22CK",
"4": "19CK",
"5": "23DK",
"6": "21CK",
"7": "16CP",
"8": "14CP",
"9": "21DK",
"10": "17CP",
"11": "14BP",
"12": "12BP",
"13": "18CP",
"14": "16BP",
"15": "14BP",
"16": "14AP",
"17": "18CK",
"18": "15BK",
"19": "12BU",
"20": "10AU",
"Result": "121-123"
},
{
"1": "26EK",
"2": "25DK",
"3": "23DP",
"4": "20DP",
"5": "24DP",
"6": "22DP",
"7": "17CP",
"8": "15CP",
"9": "22DP",
"10": "17CP",
"11": "15BP",
"12": "13BP",
"13": "19DP",
"14": "17CP",
"15": "15BP",
"16": "15BP",
"17": "19CP",
"18": "16BP",
"19": "13BK",
"20": "11AK",
"Result": "124-126"
},
{
"1": "27EP",
"2": "26EP",
"3": "24DK",
"4": "21DK",
"5": "25DK",
"6": "23DK",
"7": "18CK",
"8": "16CK",
"9": "23DK",
"10": "18DK",
"11": "16CK",
"12": "13BP",
"13": "20DK",
"14": "18CK",
"15": "16BP",
"16": "16BP",
"17": "20CK",
"18": "17CK",
"19": "14BP",
"20": "12AP",
"Result": "127-129"
},
{
"1": "28EU",
"2": "27EU",
"3": "25DP",
"4": "22DP",
"5": "26EP",
"6": "24DP",
"7": "19DP",
"8": "17DP",
"9": "24DP",
"10": "19DP",
"11": "17CP",
"12": "14CP",
"13": "21DP",
"14": "18CP",
"15": "16CK",
"16": "16BK",
"17": "21DP",
"18": "18CP",
"19": "15CU",
"20": "12BU",
"Result": "130-132"
},
{
"1": "29EK",
"2": "28EK",
"3": "26DK",
"4": "23DK",
"5": "27EK",
"6": "25DK",
"7": "20DK",
"8": "17DK",
"9": "25DK",
"10": "20DK",
"11": "18CK",
"12": "15CK",
"13": "22DK",
"14": "19CK",
"15": "17CP",
"16": "17CK",
"17": "21DK",
"18": "18CK",
"19": "15CK",
"20": "13BK",
"Result": "133-135"
},
{
"1": "30EP",
"2": "29EP",
"3": "27EP",
"4": "24EP",
"5": "28EP",
"6": "26EP",
"7": "21DP",
"8": "18DP",
"9": "26EP",
"10": "21DP",
"11": "19DP",
"12": "16CP",
"13": "23EP",
"14": "20CP",
"15": "18CK",
"16": "18CK",
"17": "22DP",
"18": "19CP",
"19": "16CP",
"20": "14BP",
"Result": "136-138"
},
{
"1": "31EU",
"2": "30EU",
"3": "28EU",
"4": "25EU",
"5": "29EU",
"6": "27EU",
"7": "22EU",
"8": "19EU",
"9": "27EU",
"10": "22EU",
"11": "20DU",
"12": "17DU",
"13": "24EU",
"14": "21DU",
"15": "19DP",
"16": "19CP",
"17": "23EU",
"18": "20DU",
"19": "17DU",
"20": "15CU",
"Result": "139-141"
},
{
"1": "32EK",
"2": "31EK",
"3": "29EK",
"4": "26EK",
"5": "30EK",
"6": "28EK",
"7": "23EK",
"8": "20EK",
"9": "28EK",
"10": "23EK",
"11": "21DK",
"12": "18DK",
"13": "25EK",
"14": "22DK",
"15": "20DK",
"16": "20DK",
"17": "24EK",
"18": "21DK",
"19": "18DK",
"20": "16CK",
"Result": "142-144"
},
{
"1": "33EP",
"2": "32EP",
"3": "30EP",
"4": "27EP",
"5": "31EP",
"6": "29EP",
"7": "24EP",
"8": "21EP",
"9": "29EP",
"10": "24EP",
"11": "22EP",
"12": "19EP",
"13": "26EP",
"14": "23EP",
"15": "21DP",
"16": "21DP",
"17": "25EP",
"18": "22EP",
"19": "19EP",
"20": "17DP",
"Result": "145-147"
},
{
"1": "35FU\n",
"2": "34FU",
"3": "31EU",
"4": "29EU",
"5": "33FU",
"6": "30EU",
"7": "25EU",
"8": "22EU",
"9": "30FU",
"10": "25EU",
"11": "23EU",
"12": "20EU",
"13": "27FU",
"14": "24EU",
"15": "22EU",
"16": "22EU",
"17": "26FU",
"18": "23EU",
"19": "20EU",
"20": "18EU",
"Result": "148-150"
}
]

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More